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));
根据输出的结果不难发现,公钥和私钥并不一致,私钥的长度要大于公钥。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。