Java AES密钥解密不工作

Java AES密钥解密不工作,java,cryptography,Java,Cryptography,我需要用RSA的公钥加密一个AES密钥,我读了几篇文章,也读了一些关于堆栈溢出的问题,我设法做了这个算法,但我不是java程序员,尽管我需要用java做这个,所以我认为我这里的问题可能更多的是语法问题。 我的代码正在加密AES密钥(不知道它是否应该加密),但当我解密它时,它不一样,我的输出: 原始AES密钥:[B@48e5707f 使用RSA加密AES密钥:[B@adea215 解密的AES密钥:[B@7b4b5d3f 而且,每次我编译和运行时,AES密钥都是相同的,与RSA相同,不应该有所不同

我需要用RSA的公钥加密一个AES密钥,我读了几篇文章,也读了一些关于堆栈溢出的问题,我设法做了这个算法,但我不是java程序员,尽管我需要用java做这个,所以我认为我这里的问题可能更多的是语法问题。 我的代码正在加密AES密钥(不知道它是否应该加密),但当我解密它时,它不一样,我的输出:

原始AES密钥:[B@48e5707f

使用RSA加密AES密钥:[B@adea215

解密的AES密钥:[B@7b4b5d3f

而且,每次我编译和运行时,AES密钥都是相同的,与RSA相同,不应该有所不同吗

我的代码:

public class Rsa {
    public static void main(String[] args) throws Throwable {
    //RSA init
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
    keyGen.initialize(512);
    KeyPair keyPair = keyGen.generateKeyPair();
    PrivateKey privateKey = keyPair.getPrivate();
    PublicKey publicKey = keyPair.getPublic();

    //AES init
    KeyGenerator keyGen2 = KeyGenerator.getInstance("AES");
    keyGen2.init(192);
    SecretKey secretKey = keyGen2.generateKey();
    byte[] encoded = secretKey.getEncoded(); 
    System.out.println("Original  AES key:"+ encoded);

    //Encrypting AES with RSA
    Cipher cipher  = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    byte[] encryptedMsg = cipher.doFinal(encoded);
    System.out.println("Encrypted AES Key with RSA:" + encryptedMsg);

    //Decrypting AES with RSA
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] decryptedMsg = cipher.doFinal(encryptedMsg);
    System.out.println("Decrypted AES Key:" + decryptedMsg);

}   

您看到的输出不是字节数组的内容,而是其内存地址(或其表示形式)。您可能希望将字节数组十六进制编码为字符串,然后输出该字符串,以便能够比较内容


您的输出不同,因为它是两个不同的字节数组对象,但这并不意味着它们的内容不同。

我阅读了有关填充以及填充如何产生一些问题的内容,但我无法使用它们,因为我遇到了一些错误,但我不知道我的问题是否是因为我使用的是原始RSA/AES与您的问题无关,但是t 512位是一个非常短的RSA密钥。包装器的强度应始终比您包装的密钥更强,因此AES 192bit密钥应至少包装在1024bit RSA中。事实上,最好使用2048 bit RSA为更大的AES密钥做好准备。我需要使用512位进行包装,这在我的规范中,但我会看看是否可以使用2048.Co你能说得更具体一点吗?我正试着按照你说的做,但我不明白“你可能想把字节数组编码成字符串”。这篇博文描述了一种简单的方法:谢谢你,这对我有帮助。