最近做的一个项目中用到这几种加密解密算法,简单总结下用法。
一 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;
}
分享到:
相关推荐
本文将详细介绍标题和描述中提到的几种加密算法:AES、MD5、ECC、DES以及RSA,并结合源码库"FlyUtils"探讨它们在跨平台环境下的应用,以及如何支持进度显示和多种编码。 首先,AES(Advanced Encryption Standard)...
winform做的一个小工具(源码),包括MD5加密、DES加密解密,RSA公钥密钥生成,RSA加密解密这几个功能。 pc6上找到的,不知道原作者是谁,感谢之。
在给定的"MD5加密,DES,RSA加解密工具"中,用户可以通过Encoder.exe文件实现这三种加密方式的操作。MD5用于快速校验数据完整性,而DES和RSA则提供加密服务。DES适合大量数据的加密,因为其速度较快,但需要保证密钥...
总共两个用户 A和B, A负责加密,B解密。用Java编写界面。 首先A用DES对选定文件加密,用hash函数对明文提取hash值,RSA对hash值加密, 然后B对加密的文件解密,对A的s值解密,比较两个值
MD5、DES和RSA是三种常见的加密算法,在信息安全领域中广泛应用。这个简易的加密解密程序结合了这三种算法,提供了对文本数据的加解密功能。下面将详细阐述这三种算法及其在程序中的作用。 1. **MD5(Message-...
总之,"MFC vc6.0 RSA DES MD5 加密解密算法"是一个涉及非对称加密、对称加密以及消息摘要的综合应用,开发者需要理解这些算法的原理,并在MFC环境中实现它们,以保证数据的安全传输和存储。通过图形化界面,使得...
在本压缩包中,提供了RSA加密解密的工具——PRO_TDES_RSA.exe,这是一个执行程序,能够帮助用户对文件进行加密和解密操作。结合"RSATool工具简易操作指南 .doc",用户可以详细了解如何使用这个工具来保护他们的敏感...
本文将详细讲解四种常见的加密算法:MD5、DES、AES和RSA,以及它们在实际应用中的加解密实例。 首先,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它可以将任意长度的数据转化为固定长度的摘要。...
在C++中使用OpenSSL库进行RSA加密解密,需要完成以下步骤: 1. **生成RSA密钥对**:首先,我们需要创建一个RSA结构体,并生成一对密钥。这通常包括调用`RSA_generate_key_ex()`函数,指定密钥长度(如2048位)和...
4. 将所有DES加密的数据块和RSA加密的DES密钥打包成一个文件或消息,发送给接收方。 5. 接收方收到后,使用自己的私钥解密RSA加密的DES密钥。 6. 使用解密出的DES密钥,对每个数据块进行解密,恢复原始数据。 这种...
RSA公钥加密/私钥解密。RSA签名/验签。各种散列:MD2/MD4/MD5,SHA/SHA1/SHA256/SHA384/SHA512。HMAC算法,支持 hmac-md5 hmac-sha1 hmac-sha256 hmac-384 hmac-sha512。PEM文件纯易语言解析,载入,导出。FPX文件...
总之,理解并正确使用DES、3DES和RSA加密算法对于保护敏感数据至关重要。在C#环境中,我们可以借助.NET Framework提供的类库轻松实现这些加密解密功能,并结合Winform开发出直观易用的应用程序。在实际项目中,应...
实现对称加密解密技术DES,非对称加密解密技术RSA,MD5
MD5 单向加密 SHA1 单向加密 DES 双向,可解密 加密字符串 ...RSA加密解密及RSA签名和验证 RSA 的密钥产生 产生私钥 和公钥 RSA 方式加密 RSA的解密函数 获取Hash描述表 RSA签名 RSA 签名验证
在提供的压缩包文件中,"3DES和RSA加密解密算法"很可能包含了一些示例代码或者库,帮助开发者理解和实现这两种加密算法。学习和理解这些代码可以帮助我们更好地运用这些技术,为我们的项目提供强大的安全保障。 总...
本文将详细介绍C#环境下实现的MD5、DES和RSA这三种常见的加密解密方法,并通过实际的编程实例来展示它们的用法。 首先,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能将任意长度的数据转化为...
**RSA加密解密** RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它的核心特点是有一对公钥和私钥。公钥用于加密,任何人都可以获取;而私钥用于解密,必须保密。在Web应用中,前端可以使用公钥对数据加密,...
### 3个著名加密算法(MD5、RSA、DES)的解析 #### 一、MD5算法 **MD5** 的全称是 **Message-Digest Algorithm 5**,这是一种广泛使用的散列函数,用于生成固定长度(128位)的摘要。MD5算法最初是由MIT的计算机科学...
Java 实现文件的 RSA 和 DES 加密 在现代密码技术中,根据密钥类型的不同,可以将其分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。对称加密算法用来对敏感数据等信息进行加密,常用的...