我有这部分RSA解密代码:
// Turn the encoded key into a real RSA private key.
// Private keys are encoded in PKCS#8.
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
// Create a cipher using that key to initialize it
Cipher rsaCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
// Read in the encrypted bytes of the session key
DataInputStream dis = new DataInputStream(new FileInputStream(fileInput));
byte[] encryptedKeyBytes = new byte[dis.readInt()];
dis.readFully(encryptedKeyBytes);
// Decrypt the session key bytes.
rsaCipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] rijndaelKeyBytes = rsaCipher.doFinal(encryptedKeyBytes);
// Transform the key bytes into an actual key.
SecretKey rijndaelKey = new SecretKeySpec(rijndaelKeyBytes, "Rijndael");
当我选择私钥文件时出现错误,我通过会话密钥对其进行加密,以对主文件进行非对称加密:
javax.crypto.BadPaddingException:数据必须以零开头
如何解决此错误?
答案 0 :(得分:0)
你的问题表明存在一些误解:
当我选择私钥文件时出现错误,我通过会话密钥对其进行加密,以对主文件进行非对称加密:
因此,上述代码使用 RSA私钥解密会话密钥。然后,会话密钥可用于解密数据。因此,您需要使用新的随机会话密钥加密数据,然后使用 RSA公钥加密会话密钥。
您通常不应为任何其他实体加密RSA私钥。 RSA私钥应该保密。您只需加密它们以便在密钥存储中进行备份或保护。