RSA加密实践
2015-10-19 09:47
387 查看
最近做了一个小应用, 需要将发送的报文采用RSA, BASE64, MD5加密。写下这篇文章, 方便自己以后查看,同时也能与各位Java开发的同行交流。
------------------------------------------------------------------
1. RSA加密
import java.security.spec.RSAPublicKeySpec.RSAPublicKeySpec;
import java.security.KeyFactory;
import java.security.Key;
import javax.crypto.Cipher;
import org.apache.commons.codec.binary.Base64;
String encryptByPK(String data, BigInteger modulus, BigInteger exponent)
throws Exception {
//创建RSAPublicKeySpec 实例,用于取公钥.
//最开始我采用X509EncodedKeySpec作为keyFactory.generatePublic(pkSepc)的入参,
//结果报错:DerInputStream.getLength(): lengthTag=25, too big.,无法得到公钥。
RSAPublicKeySpec pkSpec = new RSAPublicKeySpec(modulus, exponent);
// 取公钥
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key publicKey = keyFactory.generatePublic(pkSpec);
// 加密数据
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
//采用Base64将数据加密成字符串
return Base64.encodeBase64String(cipher.doFinal(data.getBytes()));
}
Tips :
String.getBytes() : 将字符串转换成字节数组;
2. BASE64加密;
source code :
//加密
public static String encodeBase64String(byte[] binaryData) {
return StringUtils.newStringUtf8(encodeBase64(binaryData, false));
}
//解密
public static byte[] decodeBase64(String base64String) {
return new Base64().decode(base64String);
}
3. MD5加密 : MD5可用于生成数字证书(Signature)
import java.security.MessageDigest;
byte[] encryptMD5(byte[] data) throws Exception{
MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
md5.update(data);
return md5.digest();
}
Tips : 在传输密文时, 如果有中文, 记得在加密前对数据进行编码(具体采用的编码根据应用的需要),
否则server收到中文可能乱码,从而导致数字证书不匹配。
------------------------------------------------------------------
1. RSA加密
import java.security.spec.RSAPublicKeySpec.RSAPublicKeySpec;
import java.security.KeyFactory;
import java.security.Key;
import javax.crypto.Cipher;
import org.apache.commons.codec.binary.Base64;
String encryptByPK(String data, BigInteger modulus, BigInteger exponent)
throws Exception {
//创建RSAPublicKeySpec 实例,用于取公钥.
//最开始我采用X509EncodedKeySpec作为keyFactory.generatePublic(pkSepc)的入参,
//结果报错:DerInputStream.getLength(): lengthTag=25, too big.,无法得到公钥。
RSAPublicKeySpec pkSpec = new RSAPublicKeySpec(modulus, exponent);
// 取公钥
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key publicKey = keyFactory.generatePublic(pkSpec);
// 加密数据
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
//采用Base64将数据加密成字符串
return Base64.encodeBase64String(cipher.doFinal(data.getBytes()));
}
Tips :
String.getBytes() : 将字符串转换成字节数组;
2. BASE64加密;
source code :
//加密
public static String encodeBase64String(byte[] binaryData) {
return StringUtils.newStringUtf8(encodeBase64(binaryData, false));
}
//解密
public static byte[] decodeBase64(String base64String) {
return new Base64().decode(base64String);
}
3. MD5加密 : MD5可用于生成数字证书(Signature)
import java.security.MessageDigest;
byte[] encryptMD5(byte[] data) throws Exception{
MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
md5.update(data);
return md5.digest();
}
Tips : 在传输密文时, 如果有中文, 记得在加密前对数据进行编码(具体采用的编码根据应用的需要),
否则server收到中文可能乱码,从而导致数字证书不匹配。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- OpenSSL编程之RSA
- PropertyChangeListener简单理解
- 每 172 个活动 RSA 证书中就有一个容易受到攻击
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序