非对称加密RSA算法java代码

61 阅读1分钟

1、先生成一对秘钥,用于创建私钥与公钥

//创建密匙对
String algorithm = "RSA";
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
//生成密匙对
KeyPair keyPair = keyPairGenerator.generateKeyPair();
//生成私钥
PrivateKey aPrivate = keyPair.getPrivate();
//生成公钥
PublicKey aPublic = keyPair.getPublic();
//获取私钥的字节数组
byte[] privateEncoded = aPrivate.getEncoded();
//生成公钥的字节数组
byte[] publicEncoded = aPublic.getEncoded();
//使用base64进行编码
String privateEncode = Base64.encode(privateEncoded);
//使用base64进行编码
String publicEncode = Base64.encode(publicEncoded);
System.out.println(privateEncode);
System.out.println(publicEncode);

2、使用私钥加密公钥解密,或者公钥加密私钥解密

public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
  

    String input ="hello";
    //创建加密对象
    Cipher cipher= Cipher.getInstance(algorithm);
    // 对加密进行初始化
    //第一个参数:加密的模式
    //第二个参数:你想使用公私加密还是私钥加密
    cipher.init(Cipher.ENCRYPT_MODE,aPrivate);

    //使用私钥进行加密
    byte[] bytes = cipher.doFinal(input.getBytes());
    System.out.println(Base64.encode(bytes));

    //私钥解密
    cipher.init(Cipher.DECRYPT_MODE,aPublic);
    //使用公钥进行解密
    byte[] bytes2 = cipher.doFinal(bytes);
    System.out.println(new String (bytes2));
}

3、完整代码用例

public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    //创建密匙对
    String algorithm = "RSA";
    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
    //生成密匙对
    KeyPair keyPair = keyPairGenerator.generateKeyPair();
    //生成私钥
    PrivateKey aPrivate = keyPair.getPrivate();
    //生成公钥
    PublicKey aPublic = keyPair.getPublic();
    //获取私钥的字节数组
    byte[] privateEncoded = aPrivate.getEncoded();
    //生成公钥的字节数组
    byte[] publicEncoded = aPublic.getEncoded();
    //使用base64进行编码
    String privateEncode = Base64.encode(privateEncoded);
    //使用base64进行编码
    String publicEncode = Base64.encode(publicEncoded);
    System.out.println(privateEncode);
    System.out.println(publicEncode);



    String input ="hello";
    //创建加密对象
    Cipher cipher= Cipher.getInstance(algorithm);
    // 对加密进行初始化
    //第一个参数:加密的模式
    //第二个参数:你想使用公私加密还是私钥加密
    cipher.init(Cipher.ENCRYPT_MODE,aPrivate);

    //使用私钥进行加密
    byte[] bytes = cipher.doFinal(input.getBytes());
    System.out.println(Base64.encode(bytes));

    //私钥解密
    cipher.init(Cipher.DECRYPT_MODE,aPublic);
    //使用公钥进行解密
    byte[] bytes2 = cipher.doFinal(bytes);
    System.out.println(new String (bytes2));
}