包com.mstf.rsa; 进口java.security.KeyFactory; 进口java.security.KeyPair; 进口java.security.KeyPairGenerator; 进口java.security.PrivateKey; 进口java.security.PublicKey; 进口java.security.interfaces.RSAPrivateKey; 进口java.security.interfaces.RSAPublicKey; 进口java.security.spec.PKCS8EncodedKeySpec; 进口java.security.spec.X509EncodedKeySpec; 进口javax.crypto.Cipher; 进口com.sun.org.apache.xerces.internal.impl.dv.util.Base64;/* RSA工具类。提供加密,解密,生成密钥对等方法。 RSA加密原理概述 RSA的安全性依赖于大数的分解,公钥和私钥都是两个大素数(大于100的十进制位)的函数。 据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积 密钥的产生: 1.选择两个大素数p, q,计算n=p *; 2.随机选择加密密钥e,要求e和(p - 1) * (q1)互质 3.利用欧几里德算法计算解密密钥d,使其满足e * d=1 (mod (p - 1) * (q1))(其中n、d也要互质) 4:至此得出公钥为(n, e)私钥为(n, d) RSA速度 *由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。 *速度一直是RSA的缺陷。一般来说只用于少量数据加密。*/公开课RSAsecurity { 公共静态字符串src=" https://www.yisu.com/zixun/admin "; 公共空间priENpubDE () { 尝试{//初始化秘钥 KeyPairGenerator KeyPairGenerator=KeyPairGenerator.getInstance (RSA);//秘钥长度 keyPairGenerator.initialize (1024);//初始化秘钥对 密钥对密钥对=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);//密码类为加密和解密提供密码功能,通过getinstance实例化对象 密码密码=. getinstance (RSA);//初始化加密 cipher.init(密码。ENCRYPT_MODE privateKey); 结果byte []=cipher.doFinal (src.getBytes ()); system . out。println(“私钥加密,公钥解密——加密:”+ Base64.encode(结果));//3 .私钥加密,公钥解密——解密//生成公钥 X509EncodedKeySpec X509EncodedKeySpec=new X509EncodedKeySpec (rsaPublicKey.getEncoded ()); keyFactory=KeyFactory.getInstance (RSA); PublicKey PublicKey=keyFactory.generatePublic (x509EncodedKeySpec); 密码=. getinstance (RSA);//初始化解密 cipher.init(密码。DECRYPT_MODE publicKey); 结果=cipher.doFinal(结果); system . out。println(“私钥加密,公钥解密——解密:”+新字符串(结果)); }捕捉(异常e) {//TODO自动生成的catch块 e.printStackTrace (); } } 公共空间pubENpriDE () { 尝试{//1 .初始化秘钥 KeyPairGenerator KeyPairGenerator=KeyPairGenerator.getInstance (RSA);//秘钥长度 keyPairGenerator.initialize (512);//初始化秘钥对 密钥对密钥对=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);//初始化加密//密码类为加密和解密提供密码功能,通过getinstance实例化对象 密码密码=. getinstance (RSA); cipher.init(密码。ENCRYPT_MODE publicKey);//加密字符串 结果byte []=cipher.doFinal (src.getBytes ()); system . out。println(“公钥加密,私钥解密——加密:”+ Base64.encode(结果));//3 .公钥加密,私钥解密——解密 PKCS8EncodedKeySpec PKCS8EncodedKeySpec=new PKCS8EncodedKeySpec (rsaPrivateKey.getEncoded ()); keyFactory=KeyFactory.getInstance (RSA); PrivateKey PrivateKey=keyFactory.generatePrivate (pkcs8EncodedKeySpec);//初始化解密 cipher.init(密码。DECRYPT_MODE privateKey);//解密字符串 结果=cipher.doFinal(结果); system . out。println(“公钥加密,私钥解密——解密:”+新字符串(结果)); }捕捉(异常e) {//TODO自动生成的catch块 e.printStackTrace (); } } }RSA加密的方式和解密方式实现方法(推荐)