前面為大家已經總結了,基于密鑰交換的DH算法,現在就為大家再介紹一種基于因子分解的RSA算法,這種加密算法有兩種實現形式:1、公鑰加密,私鑰解密;2、私鑰加密,公鑰解密。下面就為大家分析一下實現代碼,相對于DH算法,RSA顯得有些簡單。初始化密鑰:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(512); KeyPair keyPair = keyPairGenerator.generateKeyPair(); RSAPRivateKey rsaprivateKey = (RSAPrivateKey)keyPair.getPrivate();//私有密鑰 RSAPublicKey rsapublicKey = (RSAPublicKey)keyPair.getPublic();//公有密鑰 System.out.println("privateKey : "+Base64.encodeBase64String(rsaprivateKey.getEncoded())); System.out.println("publicKey : "+Base64.encodeBase64String(rsapublicKey.getEncoded()));1、私鑰加密,公鑰解密:
//私鑰加密,公鑰解密--加密 PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaprivateKey.getEncoded()); KeyFactory privateKeyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = privateKeyFactory.generatePrivate(pkcs8EncodedKeySpec); Cipher privateCipher = Cipher.getInstance("RSA"); privateCipher.init(Cipher.ENCRYPT_MODE, privateKey); byte[] result = privateCipher.doFinal(src.getBytes()); System.out.println("私鑰加密,公鑰解密--加密:"+Base64.encodeBase64String(result)); //私鑰加密,公鑰解密--解密 X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsapublicKey.getEncoded()); KeyFactory publicKeyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = publicKeyFactory.generatePublic(x509EncodedKeySpec); Cipher publicCipher = Cipher.getInstance("RSA"); publicCipher.init(Cipher.DECRYPT_MODE, publicKey); result = publicCipher.doFinal(result); System.out.println("私鑰加密,公鑰解密--解密:"+new String(result));2、公鑰加密,私鑰解密:
//公鑰加密,私鑰解密---加密 x509EncodedKeySpec = new X509EncodedKeySpec(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 = new PKCS8EncodedKeySpec(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("公鑰加密,私鑰解密---解密:"+new String(result));根據輸出的結果不難發現,公鑰和私鑰并不一致,私鑰的長度要大于公鑰。
到今天對于信息的加密算法:Base64、對稱加密算法、消息摘要加密算法、非對稱加密算法就全部總結完畢。
新聞熱點
疑難解答