RSA加密的方式和解密方式实现方法(推荐)
程序员文章站
2023-12-17 12:30:16
rsasecurity.java
package com.mstf.rsa;
import java.security.keyfactory;
impo...
rsasecurity.java
package com.mstf.rsa; import java.security.keyfactory; import java.security.keypair; import java.security.keypairgenerator; import java.security.privatekey; import java.security.publickey; import java.security.interfaces.rsaprivatekey; import java.security.interfaces.rsapublickey; import java.security.spec.pkcs8encodedkeyspec; import java.security.spec.x509encodedkeyspec; import javax.crypto.cipher; import com.sun.org.apache.xerces.internal.impl.dv.util.base64; /*rsa 工具类。提供加密,解密,生成密钥对等方法。 rsa加密原理概述 rsa的安全性依赖于大数的分解,公钥和私钥都是两个大素数(大于100的十进制位)的函数。 据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积 密钥的产生: 1.选择两个大素数 p,q ,计算 n=p*q; 2.随机选择加密密钥 e ,要求 e 和 (p-1)*(q-1)互质 3.利用 euclid 算法计算解密密钥 d , 使其满足 e*d = 1(mod(p-1)*(q-1)) (其中 n,d 也要互质) 4:至此得出公钥为 (n,e) 私钥为 (n,d) rsa速度 * 由于进行的都是大数计算,使得rsa最快的情况也比des慢上100倍,无论 是软件还是硬件实现。 * 速度一直是rsa的缺陷。一般来说只用于少量数据 加密。*/ public class rsasecurity { public static string src = "admin"; public void prienpubde() { try { // 初始化秘钥 keypairgenerator keypairgenerator = keypairgenerator.getinstance("rsa"); // 秘钥长度 keypairgenerator.initialize(1024); // 初始化秘钥对 keypair keypair = keypairgenerator.generatekeypair(); // 公钥 rsapublickey rsapublickey = (rsapublickey) keypair.getpublic(); // 私钥 rsaprivatekey rsaprivatekey = (rsaprivatekey) keypair.getprivate(); // 2.私钥加密,公钥解密----加密 // 生成私钥 pkcs8encodedkeyspec pkcs8encodedkeyspec = new pkcs8encodedkeyspec(rsaprivatekey.getencoded()); keyfactory keyfactory = keyfactory.getinstance("rsa"); privatekey privatekey = keyfactory.generateprivate(pkcs8encodedkeyspec); // cipher类为加密和解密提供密码功能,通过getinstance实例化对象 cipher cipher = cipher.getinstance("rsa"); // 初始化加密 cipher.init(cipher.encrypt_mode, privatekey); byte[] result = cipher.dofinal(src.getbytes()); system.out.println("私钥加密,公钥解密----加密:" + base64.encode(result)); // 3.私钥加密,公钥解密----解密 // 生成公钥 x509encodedkeyspec x509encodedkeyspec = new x509encodedkeyspec(rsapublickey.getencoded()); keyfactory = keyfactory.getinstance("rsa"); publickey publickey = keyfactory.generatepublic(x509encodedkeyspec); cipher = cipher.getinstance("rsa"); // 初始化解密 cipher.init(cipher.decrypt_mode, publickey); result = cipher.dofinal(result); system.out.println("私钥加密,公钥解密----解密:" + new string(result)); } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); } } public void pubenpride() { try { // 1.初始化秘钥 keypairgenerator keypairgenerator = keypairgenerator.getinstance("rsa"); // 秘钥长度 keypairgenerator.initialize(512); // 初始化秘钥对 keypair keypair = keypairgenerator.generatekeypair(); // 公钥 rsapublickey rsapublickey = (rsapublickey) keypair.getpublic(); // 私钥 rsaprivatekey rsaprivatekey = (rsaprivatekey) keypair.getprivate(); // 2.公钥加密,私钥解密----加密 x509encodedkeyspec x509encodedkeyspec = new x509encodedkeyspec(rsapublickey.getencoded()); keyfactory keyfactory = keyfactory.getinstance("rsa"); publickey publickey = keyfactory.generatepublic(x509encodedkeyspec); // 初始化加密 // cipher类为加密和解密提供密码功能,通过getinstance实例化对象 cipher cipher = cipher.getinstance("rsa"); cipher.init(cipher.encrypt_mode, publickey); // 加密字符串 byte[] result = cipher.dofinal(src.getbytes()); system.out.println("公钥加密,私钥解密----加密:" + base64.encode(result)); // 3.公钥加密,私钥解密-----解密 pkcs8encodedkeyspec pkcs8encodedkeyspec = new pkcs8encodedkeyspec(rsaprivatekey.getencoded()); keyfactory = keyfactory.getinstance("rsa"); privatekey privatekey = keyfactory.generateprivate(pkcs8encodedkeyspec); // 初始化解密 cipher.init(cipher.decrypt_mode, privatekey); // 解密字符串 result = cipher.dofinal(result); system.out.println("公钥加密,私钥解密-----解密:" + new string(result)); } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); } } }
rsatest.java
package com.mstf.rsa; import com.mstf.rsa.rsasecurity; public class rsatest { public static void main(string[] args) { rsasecurity rsasecurity = new rsasecurity(); system.out.println("私钥加密公钥解密例:"); rsasecurity.prienpubde(); system.out.println("公钥加密私钥解密例:"); rsasecurity.pubenpride(); } }
以上这篇rsa加密的方式和解密方式实现方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。