现在就为大家介绍一种基于因子分解的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));
根据输出的结果不难发现,公钥和私钥并不一致,私钥的长度要大于公钥。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍java 非对称加密算法DH实现详解,包括了java 非对称加密算法DH实现详解的使用技巧和注意事项,需要的朋友参考一下 非对称加密算法是相对于对称加密算法来说的,对于对称加密算法请查阅之前的总结,今天为大家介绍一下DH算法,DH是一种密钥交换算法,接收方根据发送方加密时的密钥,生成接收方解密密钥。下面就一起来学习一下吧: 初始化发送方密钥: 初始化接收方密钥: 构建接收方密钥: 构
本文向大家介绍java 对称加密算法实现详解,包括了java 对称加密算法实现详解的使用技巧和注意事项,需要的朋友参考一下 前言 对于信息的加密方式多种多样,之前为大家介绍了一种自己设计的加密方式,有兴趣的朋友可以欣赏一下,欢迎给予指点。今天为大家介绍一下对称加密方式,所谓对称加密指的是加密和解密方式呈对称格式,即解密是加密的逆过程,下面我们就看一下:DES、3DES、AES、PBE这四种方式,他
本文向大家介绍Java编程实现非对称加密的方法详解,包括了Java编程实现非对称加密的方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java编程实现非对称加密的方法。分享给大家供大家参考,具体如下: 对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,
本文向大家介绍Java对称加密算法DES实例详解,包括了Java对称加密算法DES实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java对称加密算法DES。分享给大家供大家参考,具体如下: 一 DES算法概述 1、介绍 DES:Data Encryption Standard 数据加密标准。 2、DES算法参数 二 DES算法Java实现 三 实现效果 jdk des encry
本文向大家介绍java 中RSA的方式实现非对称加密的实例,包括了java 中RSA的方式实现非对称加密的实例的使用技巧和注意事项,需要的朋友参考一下 java 中RSA的方式实现非对称加密的实例 RSA通俗理解: 你只要去想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签
本文向大家介绍ThinkPHP实现的rsa非对称加密类示例,包括了ThinkPHP实现的rsa非对称加密类示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ThinkPHP实现的rsa非对称加密类。分享给大家供大家参考,具体如下: 公钥加密后的字符串是一直变化的,但是用私钥解密后的内容仍然是相同的,这是为了加密数据使用的。 私钥加密的字符串是不会变化的,即使暴露在外网上别人截取时如果没有