RSA加解密应用
来源:互联网 发布:淘宝店运营商靠谱吗 编辑:程序博客网 时间:2024/05/17 10:40
RSA加解密应用
1:获取秘钥对
/*** 获取秘钥对* @return 秘钥map*/public static Map<String, byte[]> generateKeyBytes() { try { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM); keyPairGenerator.initialize(KEY_SIZE); KeyPair keyPair = keyPairGenerator.generateKeyPair(); RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); Map<String, byte[]> keyMap = new HashMap<String, byte[]>(); keyMap.put(PUBLIC_KEY, publicKey.getEncoded()); keyMap.put(PRIVATE_KEY, privateKey.getEncoded()); return keyMap; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null;}
2:还原公钥
/*** 还原公钥, X509EncodedKeySpec 用于构建公钥的规范 * @param keyBytes* @return*/public static PublicKey restorePublicKey(byte[] keyBytes) { X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes); try { KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM); PublicKey publicKey = factory.generatePublic(x509EncodedKeySpec); return publicKey; } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { e.printStackTrace(); } return null;}
3:还原私钥
/*** 还原私钥, PKCS8EncodedKeySpec 用于构建私钥的规范* @param keyBytes* @return*/public static PrivateKey restorePrivateKey(byte[] keyBytes) { PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes); try { KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM); PrivateKey privateKey = factory.generatePrivate(pkcs8EncodedKeySpec); return privateKey; } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { e.printStackTrace(); } return null;}
4:加密
/*** 加密,三步走* @param key 公钥* @param plainText 私钥* @return*/public static byte[] RSAEncode(PublicKey key, byte[] plainText) { try { Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, key); return cipher.doFinal(plainText); } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) { e.printStackTrace(); } return null;}
5:解密
/*** 解密,三步走* @param key* @param encodedText* @return*/public static String RSADecode(PrivateKey key, byte[] encodedText) { try { Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, key); return new String(cipher.doFinal(encodedText));| IllegalBlockSizeException | BadPaddingException e) { e.printStackTrace(); } return null;}
6:测试
public static final String PUBLIC_KEY = "publicKey";public static final String PRIVATE_KEY = "privateKey";//RSA密钥长度必须是64的倍数 ,在512~65536之间 默认是1024public static final int KEY_SIZE = 1024;public static final String PLAIN_TEXT = "hello word";@Testpublic void testRSA(){ Map<String, byte[]> keyMap = generateKeyBytes(); // 加密 PublicKey publicKey = restorePublicKey(keyMap.get(PUBLIC_KEY)); System.out.println("public key: " + Base64.encode(publicKey.getEncoded())); byte[] encodedText = RSAEncode(publicKey, PLAIN_TEXT.getBytes()); System.out.println("RSA encoded: " + Base64.encode(encodedText)); //解密 PrivateKey privateKey = restorePrivateKey(keyMap.get(PRIVATE_KEY)); System.out.println("private key: " + Base64.encode(publicKey.getEncoded())); System.out.println("RSA decoded: " + RSADecode(privateKey, encodedText));}
7:测试结果
public key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzMfk9znh1dIMREw/uv08A74RqsDQFjGb2v5FIACHYYFHNSpriBL1B5TEQEay24kEucqF3ItmVWRz3YfgpMdYPwmaWAkPsp/sMiQTnfXJ6x2clSNGTI4BecMIcc0mtvMRufgd/hDgdFd+YTXUGELB+FSyZYqqOhdEaZxk0+BXXDwIDAQABRSA encoded: DtXp9oJ42XNfEPkR5JsdhZceGAVVWpkixgL34CjXTpFjO7gO2OQfmr3v0kV68kgCjJ8MftBYwDM71cLcwwAYKF9fMyTsIt+JQBp3i7zk4QUbG6u1zzKBH6f5erGVNKQIoZ3//++0YkUpAmipUDqVtu73Uha0gF7xyT2KoQzR4AQ=private key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzMfk9znh1dIMREw/uv08A74RqsDQFjGb2v5FIACHYYFHNSpriBL1B5TEQEay24kEucqF3ItmVWRz3YfgpMdYPwmaWAkPsp/sMiQTnfXJ6x2clSNGTI4BecMIcc0mtvMRufgd/hDgdFd+YTXUGELB+FSyZYqqOhdEaZxk0+BXXDwIDAQABRSA decoded: hello word
阅读全文
0 0
- RSA加解密应用
- RSA加解密的应用
- RSA-RSA加解密运算
- RSA加解密原理
- RSA加解密源码
- openssl rsa加解密
- RSA加解密算法
- java RSA 加解密
- RSA加解密
- RSA 加解密算法
- java RSA 加解密
- java RSA 加解密
- rsa 加解密
- android RSA加解密
- RSA 加解密算法
- android RSA加解密
- RSA加解密
- python rsa加解密
- 航线设置(dp)
- Matlab Tools for Network Analysis 网络分析工具包 (2006-2011)
- 初学opencv/基本操作
- 七、负载均衡-Ribbon 如何对负载均衡策略进行扩展
- Professional JS(try-catch续/Node/Document类型)
- RSA加解密应用
- hdoj 1072 Nightmare 广搜
- 猴子吃桃问题
- 常用 SQL Server 规范集锦
- JAVA面向对象易错习题详解
- hibernate学习笔记一
- spring整合hibernate出现HibernateException: Unable to get the default Bean Validation factory
- HDU
- Servlet--Session创建时间