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
- java RSA公私钥与其base64编码之间的转换
- java RSA公私钥与其base64编码之间的转换
- Pdf与Base64编码之间的转换
- Pdf与Base64编码之间的转换
- 生成RSA公私钥
- RSA公私钥结构
- RSA生成公私钥
- java BASE64与字符串之间的转换
- 基于公私钥文件的RSA非对称加密的Java端实现
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
- Java OpenSSL生成的RSA公私钥进行数据加解密 .
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
- ROM、RAM、DRAM、SRAM和FLASH的区别
- iOS CallkitDemo
- as2.3常见错误
- 关于MJRefresh两句代码即可实现
- C语言中函数参数的入栈顺序
- java RSA公私钥与其base64编码之间的转换
- 天空之城 欢乐颂
- Python与风水 的‘’南北通透‘’住宅与‘’南北” 向住宅的均价数据分析
- pdf转换神器,功能全面高质量解决pdf转换问题
- 1076. Forwards on Weibo (30)
- 发送短信工具类(亿美短信平台接口)
- js中的加、减、乘、除(适用于所有场景)
- 《笨办法学python》加分习题29——我的答案
- POJ 2503 Babelfish(字典树Trie)