java RSA公私钥与其base64编码之间的转换

来源:互联网 发布:js中的classname啥意思 编辑:程序博客网 时间:2024/05/21 19:29
import Java.security.Key;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 sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;  public class RSAHelper {       /**       * 得到公钥       * @param key 密钥字符串(经过base64编码)       * @throws Exception       */      public static PublicKey getPublicKey(String key) throws Exception {            byte[] keyBytes;            keyBytes = (new BASE64Decoder()).decodeBuffer(key);             X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);            KeyFactory keyFactory = KeyFactory.getInstance("RSA");            PublicKey publicKey = keyFactory.generatePublic(keySpec);            return publicKey;      }      /**       * 得到私钥       * @param key 密钥字符串(经过base64编码)       * @throws Exception       */      public static PrivateKey getPrivateKey(String key) throws Exception {            byte[] keyBytes;            keyBytes = (new BASE64Decoder()).decodeBuffer(key);             PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);            KeyFactory keyFactory = KeyFactory.getInstance("RSA");            PrivateKey privateKey = keyFactory.generatePrivate(keySpec);            return privateKey;      }       /**       * 得到密钥字符串(经过base64编码)       * @return       */      public static String getKeyString(Key key) throws Exception {            byte[] keyBytes = key.getEncoded();            String s = (new BASE64Encoder()).encode(keyBytes);            return s;      }        public static void main(String[] args) throws Exception {             KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");            //密钥位数            keyPairGen.initialize(1024);            //密钥对            KeyPair keyPair = keyPairGen.generateKeyPair();             // 公钥            PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();             // 私钥            PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();             String publicKeyString = getKeyString(publicKey);            System.out.println("public:\n" + publicKeyString);             String privateKeyString = getKeyString(privateKey);            System.out.println("private:\n" + privateKeyString);             //加解密类            Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");             //明文            byte[] plainText = "我们都很好!邮件:@sina.com".getBytes();             //加密            cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] enBytes = cipher.doFinal(plainText); //通过密钥字符串得到密钥            publicKey = getPublicKey(publicKeyString);            privateKey = getPrivateKey(privateKeyString);             //解密            cipher.init(Cipher.DECRYPT_MODE, privateKey);            byte[]deBytes = cipher.doFinal(enBytes);             publicKeyString = getKeyString(publicKey);            System.out.println("public:\n" +publicKeyString);             privateKeyString = getKeyString(privateKey);            System.out.println("private:\n" + privateKeyString);             String s = new String(deBytes);            System.out.println(s);        } }通过modulus \public exponent \private exponent生成 RSA Key import java.math.BigInteger;import java.security.KeyFactory;import java.security.PrivateKey;import java.security.PublicKey;import java.security.spec.RSAPrivateKeySpec;import java.security.spec.RSAPublicKeySpec;import javax.crypto.Cipher;public class RsaKey {      public PublicKey getPublicKey(String modulus,String publicExponent) throws Exception {            BigInteger m = new BigInteger(modulus);            BigInteger e = new BigInteger(publicExponent);            RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m,e);            KeyFactory keyFactory = KeyFactory.getInstance("RSA");            PublicKey publicKey = keyFactory.generatePublic(keySpec);            return publicKey;      }      public PrivateKey getPrivateKey(String modulus,String privateExponent) throws Exception {            BigInteger m = new BigInteger(modulus);            BigInteger e = new BigInteger(privateExponent);            RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(m,e);            KeyFactory keyFactory = KeyFactory.getInstance("RSA");            PrivateKey privateKey = keyFactory.generatePrivate(keySpec);            return privateKey;      }      public static void main(String[] args) throws Exception {            String modulus = "10103166745709600780215616551837697832816413714471062522342538060943596036859967333870827790358555455232243383580565187280643159050869924436081447583051139";            String publicExponent = "65537";            String privateExponet = "367979294475011322800474185715497882523349856362702385535371444397399388741997039894583483410120364529325888461124714276674612930833020362278754665756193";            RsaKey key = new RsaKey();            PublicKey publicKey = key.getPublicKey(modulus, publicExponent);            PrivateKey privateKey = key.getPrivateKey(modulus, privateExponet);            //加解密类            Cipher cipher = Cipher.getInstance("RSA");            //明文            byte[] plainText = "我们都很好!邮件:@sina.com".getBytes();            //加密            cipher.init(Cipher.ENCRYPT_MODE, publicKey);        byte[] enBytes = cipher.doFinal(plainText);        cipher.init(Cipher.DECRYPT_MODE, privateKey);            byte[]deBytes = cipher.doFinal(enBytes);            String s = new String(deBytes);            System.out.println(s);      }} 


本文转载自csdn文章:java RSA公私钥与其base64编码之间的转换

阅读全文
0 0
原创粉丝点击