最近做的一个项目中用到这几种加密解密算法,简单总结下用法。
一 MD5、DES、RSA的基本概念?
相信大家多多少少都接触过一些加密解密算法,MD5可以说是最常用的一种了,MD5是直接对要加密信息进行加密的消息摘要算法,DES是一种对称加密算法,RSA则是一种非对称加密算法。
所谓对称加密是一种将原始数据(需加密消息)和加密密钥key一起经过特殊加密算法处理,在解密时使用同一密钥(加密时使用的加密密钥key)与加过密的数据一起经过相同算法的逆算法对密文进行解密。
非对称加密是借助匹配的一对密钥(公钥publicKey 和私钥privateKey),加密时借助公钥和原始数据(需加密消息)一起经过特殊加密算法处理,解密时采用私钥和加过密的数据进过逆算法对密文进行解密;或者加密时使用私钥进行加密,解密时使用公钥进行解密。
1、java(jdk1.6)中java.security.MessageDigest抽象类为应用程序提供信息摘要算法的功能,用法也非常简单。
MessageDigest md = MessageDigest.getInstance("MD5"); // 初始化
byte b_data [] = dataString.getByte(); // 加密前先将需加密数据(字符串dataString)转成byte[]
byte md5_result [] = md.digest(b_data); // 加密返回摘要信息
2、DES算法,首先需要生成一个密钥key,这里采用随机数生成,然后根据这个密钥进行加密解密操作。
SecureRandom sr = new SecureRandom(); // DES算法要求有一个可信任的随机数源
KeyGenerator desKg = KeyGenerator.getInstance("DES"); // 为DES算法生成一个KeyGenerator对象
desKg.init(sr);
SecretKey key = desKg.generateKey(); //获取密钥对象
byte[] rawKeyData = key.getEncoded(); // 生成DES密钥
/**
* 利用DES算法加密二进制数据
* rawKeyData 密钥key | rawOrignData 需加密数据
* @param rawKeyData byte[]
* @param byOrignData byte[]
* @return byte[]
*/
public static byte[] desEncrypt(byte[] rawKeyData,byte[] rawOrignData) throws Exception
{
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密匙数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(rawKeyData);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES");
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, key, sr);
// 现在,获取数据并加密
byte encryptedData[] = cipher.doFinal(rawOrignData);
// 返回加密后的数据
return encryptedData;
}
/**
* 利用DES算法解密二进制数据
* rawKeyData 密钥key | rawCryptograph 需解密数据
* @param rawKeyData byte[]
* @param rawCryptograph byte[]
* @return byte[]
*/
public static byte[] desDecrypt(byte[] rawKeyData,byte[] rawCryptograph) throws Exception
{
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密匙数据创建一个DESKeySpec对象
DESKeySpec dks = new DESKeySpec(rawKeyData);
// 创建一个密匙工厂,然后用它把DESKeySpec对象转换成一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance("DES");
// 用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, key, sr);
// 正式执行解密操作
return cipher.doFinal(rawCryptograph);
}
3、RSA算法,首先需要生成密钥对(公钥publicKey、私钥privateKey),这里采用随机数产生,然后根据密钥对进行加密解密操作。
// 为RSA算法,这里借助了jar包 bcprov-jdk14-145.jar 用来生成一个KeyPairGenerator对象
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider());
//指定密钥的长度,初始化密钥对生成器 (这里假设密钥长度为1024)
SecureRandom ran = new SecureRandom();
kpg.initialize(1024, ran);
KeyPair keyPair = kpg.genKeyPair(); //生成密钥对
//获取公钥
RSAPublicKey pbkey = (RSAPublicKey) keyPair.getPublic();
BigInteger PublicExponent = pbkey.getPublicExponent(); // 从RSA密钥对中获取公有指数
//或者获取私钥
RSAPrivateKey prkey = (RSAPrivateKey)keyPair.getPrivate();
BigInteger PrivateExponent = prkey.getPrivateExponent(); //从RSA密钥对中获取私有指数
BigInteger Modulus = pbkey.getModulus(); // RSA 密钥对中用到的一个公共系数
//(RSA公钥对象是有PublicExponent + Modulus 生成的,私钥对象是有rivateExponent + Modulus生成的)
/**
* 根据系数和指数生成公钥
* @param Modulus BigInteger
* @param PublicExponent BigInteger
* @return void
*/
private static RSAPublicKey generateRSAPublicKey(BigInteger Modulus, BigInteger PublicExponent) throws Exception {
KeyFactory keyFac = null;
try {
keyFac = KeyFactory.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider());
} catch (NoSuchAlgorithmException ex) {
throw new Exception(ex.getMessage());
}
RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(Modulus, PublicExponent);
try {
return (RSAPublicKey) keyFac.generatePublic(pubKeySpec);
} catch (InvalidKeySpecException ex) {
throw new Exception(ex.getMessage());
}
}
/**
* 根据系数和指数生成私钥
* @param Modulus BigInteger
* @param PrivateExponent BigInteger
* @return void
*/
private static RSAPrivateKey generateRSAPrivateKey(BigInteger Modulus, BigInteger PrivateExponent) throws Exception {
KeyFactory keyFac = null;
try {
keyFac = KeyFactory.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider());
} catch (NoSuchAlgorithmException ex) {
throw new Exception(ex.getMessage());
}
RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(Modulus, PrivateExponent);
try {
return (RSAPrivateKey) keyFac.generatePrivate(priKeySpec);
} catch (InvalidKeySpecException ex) {
throw new Exception(ex.getMessage());
}
}
/**
* RSA加密
* Encrypt method
*
* @return byte[]
*/
protected byte[] encrypt(RSAPublicKey publicKey, byte[] data) {
if (publicKey != null) {
try {
Cipher cipher = Cipher.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(data);
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
/**
* RSA解密
* decrypt method
*
* @return byte[]
*/
protected byte[] decrypt(RSAPrivateKey privateKey, byte[] raw) {
if (privateKey != null) {
try {
Cipher cipher = Cipher.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider());
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(raw);
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
分享到:
相关推荐
winform做的一个小工具(源码),包括MD5加密、DES加密解密,RSA公钥密钥生成,RSA加密解密这几个功能。 pc6上找到的,不知道原作者是谁,感谢之。
跨平台 AES MD5 ECC DES RSA 加密解密 支持 进度 支持多种编码.源码.FlyUtils
总共两个用户 A和B, A负责加密,B解密。用Java编写界面。 首先A用DES对选定文件加密,用hash函数对明文提取hash值,RSA对hash值加密, 然后B对加密的文件解密,对A的s值解密,比较两个值
可以实现MD5加密,DES加密解密,RSA加密解密,运行目录: md5加解密工具\Encoder\Encoder\bin\Debug\下的Encoder.exe文件即可
OpenSSL RSA AES加密解密C++源码
Hash MD5 DES AES RSA加解密实例
RSA公钥加密/私钥解密。RSA签名/验签。各种散列:MD2/MD4/MD5,SHA/SHA1/SHA256/SHA384/SHA512。HMAC算法,支持 hmac-md5 hmac-sha1 hmac-sha256 hmac-384 hmac-sha512。PEM文件纯易语言解析,载入,导出。FPX文件...
MFC vc6.0 RSA DES MD5的加密解密算法 图形化开发
实现对称加密解密技术DES,非对称加密解密技术RSA,MD5
C# 实现 DES 3DES RSA 加密解密算法 采用 vs2005实现 winform应用程序
RSA结合DES加密解密大数据
一个很好用的加密解密工机具,.cs的源代码文件,可以实现文本加密解密运算
java数字签名,大小文件MD5验证,DES加密解密RSA加密解密,SWT浏览器插件的等源代码下载。
MD5 单向加密 SHA1 单向加密 DES 双向,可解密 加密字符串 ...RSA加密解密及RSA签名和验证 RSA 的密钥产生 产生私钥 和公钥 RSA 方式加密 RSA的解密函数 获取Hash描述表 RSA签名 RSA 签名验证
js前台通过RSA,DES加解密,java后台解密、加密
3DES和RSA加密解密算法,简单实用,直接放参数即可
J2ME上的DES、RSA加密解密包,非常简单易用。
JAVA实现RSA加密和3DES加解密,。
DES与RSA加密解密算法(PPT).ppt