RSA加密的方式和解密方式实现方法(推荐)

  

        包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加密的方式和解密方式实现方法(推荐)