rsa加密
来源:互联网 发布:赚佣金的软件 编辑:程序博客网 时间:2024/05/16 12:15
用JAVA实现RSA加密过程,有以下几个步骤:
1、甲方构建密钥对(公钥和私钥,公钥给对方,私钥留给自己)2、甲方使用私钥加密数据,然后用私钥对加密后的数据签名,并把这些发送给乙方;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。
3、乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。
示例代码如下:
- package com.rsa.core;
- 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 RSACoder {
- 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;
- }
- 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 = "91686280721609".getBytes();
- //加密
- cipher.init(Cipher.ENCRYPT_MODE, publicKey);
- byte[] enBytes = cipher.doFinal(plainText);
- String s1 = new String(enBytes);
- System.out.println("加密后的密文:" + s1);
- //通过密钥字符串得到密钥
- 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);
- }
- }
0 0
- RSA加密
- rsa 加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- RSA 加密
- RSA 加密
- rsa加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- RSA加密
- C++ Primer 10.6
- CentOS安装mysql
- 同事测试APNS推送小结
- 《黑客免杀攻防》读书笔记-软件逆向工程-5循环分支
- CSS3 Transform
- rsa加密
- editplus查找替换的正则表达式应用
- 线程的分离状态 pthread_attr_setdetachstate 函数使用
- 读取String文件的方法
- 目标计划
- 记一RTSP调试记录
- 《unix高级环境编程》套接字——套接字基本操作
- 织梦dedecms自动编号autoindex和itemindex的使用
- iOS: NSUserDefaults 要注意的地方 尤其首次设置默认值的方法