java实现中文RSA公钥加密私钥解密代码

代码语言:java

所属分类:加密解密

代码描述:java实现中文RSA公钥加密私钥解密代码

代码标签: RSA 公钥 加密 私钥 解密

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateCrtKey;
import java.security.interfaces.RSAPublicKey;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.*;

public class RSAChinese {
    /**
    * 创建密钥对生成器,指定加密和解密算法为RSA
    * @param keylen
    * @return
    */
    public String[] createKey(int keylen) {// 输入密钥长度
    String[] output = new String[5]; // 用来存储密钥的e n d p q
        try {
            KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
            kpg.initialize(keylen); // 指定密钥的长度,初始化密钥对生成器
            KeyPair kp = kpg.generateKeyPair(); // 生成密钥对
            RSAPublicKey puk = (RSAPublicKey) kp.getPublic();
            RSAPrivateCrtKey prk = (RSAPrivateCrtKey) kp.getPrivate();
            BigInteger e = puk.getPublicExponent();
            BigInteger n = puk.getModulus();
            BigInteger d = prk.getPrivateExponent();
            BigInteger p = prk.getPrimeP();
            BigInteger q = prk.getPrimeQ();
            output[0] = e.toString();
            output[1] = n.toString();
            output[2] = d.toString();
            output[3] = p.toString();
            output[4] = q.toString();
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(RSAChinese.class.getName()).log(Level.SEVERE, null, ex);
        }
        return output;
    }


    /**
    * 加密在RSA公钥中包含有两个整数信息:e和n。对于明文数字m,计算密文的公式是m的e次方再与n求模。
    * @param clearText 明文
    * @param eStr 公钥
    * @param nStr
    * @return
    */
    public String encrypt(String clearText, String eStr, String nStr) {
        String secretText = new String();
        
        try {
            clearText = URLEncoder.encode(clearText,"GBK");
            byte text[]=clearText.getBytes("GBK");//将字符串转换成byte类型数组,实质是各个字符的二进制形式
            BigInteger mm=new BigInteger(text);//二进制串转换为一个大整数
            clearText = mm.toString();
            
            BigInteger e = new BigInteger(eStr);
            BigInteger n = new BigInteger(nStr);
            byte[] ptext = clearText.getBytes("UTF8"); // 获取明文的大整数
            BigInteger m = new BigInteg.........完整代码请登录后点击上方下载按钮下载查看

网友评论0