Java 小白提问,这段代码是标准 RSA 加密吗

讨论 未结 9 34
seers
seers 会员 2022年10月4日 01:48 发表
<p>对加密方面不太熟,请大佬帮忙看看</p> <pre><code>public static String encryptByPublicKey(String source, byte[] key) throws Exception { byte[] data = source.getBytes("utf-8"); byte[] keyBytes = key; X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); Key publicKey = keyFactory.generatePublic(x509KeySpec); Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(1, publicKey); int inputLen = data.length; ByteArrayOutputStream out = new ByteArrayOutputStream(); int offSet = 0; int i = 0; while (inputLen - offSet &gt; 0) { byte[] cache; if (inputLen - offSet &gt; MAX_ENCRYPT_BLOCK) { cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK); } else { cache = cipher.doFinal(data, offSet, inputLen - offSet); } out.write(cache, 0, cache.length); i++; offSet = i * MAX_ENCRYPT_BLOCK; } byte[] encryptedData = out.toByteArray(); out.close(); return (new String(Base64.encodeBase64(encryptedData), "UTF8")).replaceAll("\r\n", ""); } </code></pre>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
9个回复
  • liprais
    2022年10月4日 01:48
    RSA/ECB/PKCS1Padding 这不都写了
    0 0
  • seers
    2022年10月4日 01:48
    我在用 go 重写某个接口,其中会用到这个校验,但是我调用 go 的标准 rsa 实现访问接口一直报错
    0 0
  • liprais
    2022年10月4日 02:18
    很显然你写的跟 java 的实现不一样,我猜问题出在 padding 上
    0 0
  • wangsongyan
    2022年10月4日 02:18
    贴出 go 代码和对应的 Java 明文、key 、密文更好解决
    0 0
  • eason1874
    2022年10月4日 02:49
    很明显是内置标准 RSA 库,但他是分块加密,然后再把结果拼接起来,所以你解密的时候也要分块 MAX_ENCRYPT_BLOCK 是它明文块长度,根据它可以算出密文块有多长,不过代码里应该还有对应的 MAX_DECRYPT_BLOCK 表示密文块有多长,直接看那个就行
    0 0
  • seers
    2022年10月4日 02:49
    @ 大佬帮忙看看
    0 0
  • lysS
    2022年10月4日 02:49
    最后对密文算了 base64 的,要用 DecryptPKCS1v15 进行解密
    0 0
  • seers
    2022年10月4日 02:49
    原来如此,我还以为 while 循环是标准的一部分,看来还是稍微魔改了一下
    0 0
  • Bingchunmoli
    2022年10月4日 03:49
    因为不改的话,加密长度问题可能抛异常
    0 0