解密例外

时间:2018-04-13 01:57:32

标签: java security encryption rsa

我正在尝试从Alice和Bob生成共享密钥。我使用密钥生成器来获取Bob和Alice的公钥和私钥。然后,我使用AES生成了一个密钥。我应该做的是加密密钥然后解密它,它应该与原始密钥相同。但是,我的代码给了我一个说明"解密错误"的例外。我无法弄清楚原因。谁能帮我?谢谢!

此外,decodeBytes和generateSharedKey应该是相同的,我也遇到了麻烦。

import java.security.*;
import java.util.UUID;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class rsa {
    static SecretKey sharedKey = null;
    public static void main(String[] args) throws NoSuchAlgorithmException, 
    NoSuchProviderException, InvalidKeyException, NoSuchPaddingException, 
    IllegalBlockSizeException, BadPaddingException {


        //Generates Key Pair -> a private and public key for both Alice and 
         Bob
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(2048);

        //Alice's key pair
        KeyPair aliceKey = keyGen.genKeyPair();
        PublicKey pubAlice = aliceKey.getPublic(); //alice's public key
        PrivateKey privAlice = aliceKey.getPrivate();//alice's private key

        //Bob's key pair
        KeyPair bobKey = keyGen.genKeyPair();
        PublicKey pubBob = bobKey.getPublic(); //bob's public key
        PrivateKey privBob = bobKey.getPrivate();// bob's private key

        //Generates a random key and encrypt with Bob's public Key
        System.out.println(generateSharedKey());

        byte[] keyEncrypted = encrypt(sharedKey, pubBob);

        byte[] decodeBytes = decrypt(sharedKey, privBob);
        System.out.println(decodeBytes);
        }

    public static SecretKey generateSharedKey() throws 
    NoSuchAlgorithmException{ 
        KeyGenerator sharedKeyGen = KeyGenerator.getInstance("AES"); 
        sharedKey = sharedKeyGen.generateKey();
        return sharedKey;
    }

    public static byte[] encrypt(SecretKey sharedKey, PublicKey pubKey) 
    throws NoSuchAlgorithmException, NoSuchPaddingException, 
    InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        //System.out.println(inputBytes);

        return cipher.doFinal(generateSharedKey().getEncoded());   
    }

    public static byte[] decrypt(SecretKey sharedKey, PrivateKey privKey) 
  throws NoSuchAlgorithmException, NoSuchPaddingException, 
    InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privKey);
        return cipher.doFinal(generateSharedKey().getEncoded());

    }
}

1 个答案:

答案 0 :(得分:1)

在发布之前请仔细阅读您的代码...您正在生成共享密钥,然后尝试使用decrypt方法解密该代码...

您应该传递byte[]来解密并返回SecretKey,而不是相反。