加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java RSA加密

发布时间:2020-12-14 23:57:45 所属栏目:Java 来源:网络整理
导读:我试图来回编码一个简单的字符串“测试”. public static String encode(Key publicKey,String data) throws NoSuchAlgorithmException,NoSuchPaddingException,InvalidKeyException,IllegalBlockSizeException,BadPaddingException { byte[] byteData = dat
我试图来回编码一个简单的字符串“测试”.
public static String encode(Key publicKey,String data) throws NoSuchAlgorithmException,NoSuchPaddingException,InvalidKeyException,IllegalBlockSizeException,BadPaddingException {

    byte[] byteData = data.getBytes(); // convert string to byte array

    Cipher cipher = Cipher.getInstance(ALGORITHM); // create conversion processing object
    cipher.init(Cipher.ENCRYPT_MODE,publicKey); // initialize object's mode and key

    byte[] encryptedByteData = cipher.doFinal(byteData); // use object for encryption

    return new String(encryptedByteData); // convert encrypted byte array to string and return it

}

public static String decode(Key privateKey,BadPaddingException {

    byte[] byteData = data.getBytes(); // convert string to byte array

    Cipher cipher = Cipher.getInstance(ALGORITHM); // create conversion processing object
    cipher.init(Cipher.DECRYPT_MODE,privateKey); // initialize object's mode and key

    System.out.println(byteData.length);

    byte[] decryptedByteData = cipher.doFinal(byteData); // use object for decryption

    return new String(decryptedByteData); // convert decrypted byte array to string and return it

}

然而,虽然加密工作正常(ALGORITHM是“RSA”),但是当尝试解密我刚从加密“测试”中获取的字符串时,我得到以下异常:

javax.crypto.IllegalBlockSizeException: Data must not be longer than 256 bytes

我应该分割256的块中的加密字节才能解密吗?

解决方法

您无法将随机字节可靠地转换为字符串.结果将取决于您运行此操作的机器上的默认字符编码.有很多编码,密文将被破坏,信息将丢失.

修改代码以使用byte []代替(doFinal())方法的结果.

如果需要将byte []转换为字符串,请使用Base-64等编码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读