用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);
}
}
分享到:
相关推荐
C# .net 使用Java公钥实现RSA加密
用java实现RSA加密
JAVA+RSA的DEMO工程,适合初学者学习RSA加密解密 文档参看 http://blog.csdn.net/u013400939/article/details/44490441
Java实现文件的RSA和DES加密 说明代码
RSA加密算法,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。...加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开...本资源是通过Android、java实现的RSA加密的例子,可供大家参考学习。
JAVA 实现RSA的加解密算法,通过BASE64编码,密钥长度1024
RSA加密 Java实现,RSA加密 Java实现,RSA加密 Java实现
JAVA也是通过包来实现加密和解密的,那么我的C++是通过OPENSSL的库来实现的。 重点来到了:RSA使用过程 1、C++随机生成一对公钥和私钥 2、JAVA用公钥给明文打包形成密文 3、C++用私钥解密密文
基于Java的RSA文件加密软件的设计与实现项目是一款基于Java语言开发的文件加密软件,主要使用Java加密标准库中的RSA算法实现文件加密和解密。该系统主要适用于需要保护文件安全性的个人或企业用户,提供可靠的文件...
用java实现的rsa加密算法,里面有详细的加密过程的实现
本资源实现前端加密、Java后端加密。本资源出自他人整合。
RSA加密算法实现以及C#与java互通加解密,解决RSA算法在java与C#相互通用
asp.net RSA 私钥加密公钥解密 能解 php Java 实现RSA加密互通 ,PKCS#8 格式的的密钥文件 ,公钥解密 依赖于BouncyCastle.Crypto.dll
C#RSA加密与JAVA解密,实现相互通信,对字符进行加密,java解密,对密文字节进行编码
* RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。 * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。 * RSA加密解密:私钥...
对不起,之前上传的那个RSA的实现代码,在上传时传的是空文档。现在纠正过来,sorry~
JAVA中RSA加密解密工具类
C# RSA加密、支持JAVA格式公钥私钥
基于JAVA的RSA文件加密软件的设计与实现(源代码).zip基于JAVA的RSA文件加密软件的设计与实现(源代码).zip基于JAVA的RSA文件加密软件的设计与实现(源代码).zip基于JAVA的RSA文件加密软件的设计与实现(源代码).zip基于...