java 非对称加密算法RSA实现详解
现在就为大家介绍一种基于因子分解的RSA算法,这种加密算法有两种实现形式:1、公钥加密,私钥解密;2、私钥加密,公钥解密。下面就为大家分析一下实现代码,相对于DH算法,RSA显得有些简单。
初始化密钥:
KeyPairGeneratorkeyPairGenerator=KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPairkeyPair=keyPairGenerator.generateKeyPair();
RSAPrivateKeyrsaprivateKey=(RSAPrivateKey)keyPair.getPrivate();//私有密钥
RSAPublicKeyrsapublicKey=(RSAPublicKey)keyPair.getPublic();//公有密钥
System.out.println("privateKey:"+Base64.encodeBase64String(rsaprivateKey.getEncoded()));
System.out.println("publicKey:"+Base64.encodeBase64String(rsapublicKey.getEncoded()));
1、私钥加密,公钥解密:
//私钥加密,公钥解密--加密
PKCS8EncodedKeySpecpkcs8EncodedKeySpec=newPKCS8EncodedKeySpec(rsaprivateKey.getEncoded());
KeyFactoryprivateKeyFactory=KeyFactory.getInstance("RSA");
PrivateKeyprivateKey=privateKeyFactory.generatePrivate(pkcs8EncodedKeySpec);
CipherprivateCipher=Cipher.getInstance("RSA");
privateCipher.init(Cipher.ENCRYPT_MODE,privateKey);
byte[]result=privateCipher.doFinal(src.getBytes());
System.out.println("私钥加密,公钥解密--加密:"+Base64.encodeBase64String(result));
//私钥加密,公钥解密--解密
X509EncodedKeySpecx509EncodedKeySpec=newX509EncodedKeySpec(rsapublicKey.getEncoded());
KeyFactorypublicKeyFactory=KeyFactory.getInstance("RSA");
PublicKeypublicKey=publicKeyFactory.generatePublic(x509EncodedKeySpec);
CipherpublicCipher=Cipher.getInstance("RSA");
publicCipher.init(Cipher.DECRYPT_MODE,publicKey);
result=publicCipher.doFinal(result);
System.out.println("私钥加密,公钥解密--解密:"+newString(result));
2、公钥加密,私钥解密:
//公钥加密,私钥解密---加密
x509EncodedKeySpec=newX509EncodedKeySpec(rsapublicKey.getEncoded());
publicKeyFactory=KeyFactory.getInstance("RSA");
publicKey=publicKeyFactory.generatePublic(x509EncodedKeySpec);
publicCipher=Cipher.getInstance("RSA");
publicCipher.init(Cipher.ENCRYPT_MODE,publicKey);
result=publicCipher.doFinal(src.getBytes());
System.out.println("公钥加密,私钥解密---加密:"+Base64.encodeBase64String(result));
//公钥加密,私钥解密---解密
pkcs8EncodedKeySpec=newPKCS8EncodedKeySpec(rsaprivateKey.getEncoded());
privateKeyFactory=KeyFactory.getInstance("RSA");
privateKey=privateKeyFactory.generatePrivate(pkcs8EncodedKeySpec);
privateCipher=Cipher.getInstance("RSA");
privateCipher.init(Cipher.DECRYPT_MODE,privateKey);
result=privateCipher.doFinal(result);
System.out.println("公钥加密,私钥解密---解密:"+newString(result));
根据输出的结果不难发现,公钥和私钥并不一致,私钥的长度要大于公钥。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。