学习url:http://www.ibm.com/developerworks/cn/java/l-security/
MD5 16位加密
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class PasswordEnOrDecode {
private static final String PASSWORD_CRYPT_KEY = "__longteng_";
private final static String DES = "DES";
/**
* 加密
*
* @param src
* 数据源
* @param key
* 密钥,长度必须是8的倍数
* @return 返回加密后的数据
* @throws Exception
*/
public static byte[] encrypt(byte[] src, byte[] key) throws Exception {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密匙数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成
// 一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
// 现在,获取数据并加密
// 正式执行加密操作
return cipher.doFinal(src);
}
/**
* 解密
*
* @param src
* 数据源
* @param key
* 密钥,长度必须是8的倍数
* @return 返回解密后的原始数据
* @throws Exception
*
*/
public static byte[] decrypt(byte[] src, byte[] key) throws Exception {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密匙数据创建一个DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密匙工厂,然后用它把DESKeySpec对象转换成
// 一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
// 现在,获取数据并解密
// 正式执行解密操作
return cipher.doFinal(src);
}
/**
* 密码解密
*
* @param data
* @return
* @throws Exception
*/
public final static String jiemi(String data) {
try {
return new String(decrypt(hex2byte(data.getBytes()),
PASSWORD_CRYPT_KEY.getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 密码加密
*
* @param password
* @return
* @throws Exception
*/
public final static String jiami(String password) {
try {
return byte2hex(encrypt(password.getBytes(), PASSWORD_CRYPT_KEY
.getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 二行制转字符串
*
* @param b
* @return
*/
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
}
return hs.toUpperCase();
}
public static byte[] hex2byte(byte[] b) {
if ((b.length % 2) != 0)
throw new IllegalArgumentException("长度不是偶数");
byte[] b2 = new byte[b.length / 2];
for (int n = 0; n < b.length; n += 2) {
String item = new String(b, n, 2);
b2[n / 2] = (byte) Integer.parseInt(item, 16);
}
return b2;
}
public static void main(String args[]) {
String aa = PasswordEnOrDecode.jiami("rr");
System.out.println("原值:"+"098f6bcd4621d373cade4e832627b4f6");
System.out.println("加密后的密码:" + aa + "==>" + aa.length());
System.out.println("解密后的密码:" + PasswordEnOrDecode.jiemi(aa));
}
}
32位加密
public class Md5 {
public Md5() {
}
public static String byte2hex(byte[] b) { //二行制转字符串
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
if (n < b.length - 1)
hs = hs;
}
return hs.toUpperCase();
}
public static String getMD5(String password) {
String returnStr = null;
try {
java.security.MessageDigest alga = java.security.MessageDigest.
getInstance("MD5");
alga.update(password.getBytes());
byte[] digesta = alga.digest();
returnStr = byte2hex(digesta);
}
catch (Exception e) {}
return returnStr;
}
public static void main(String args[]) {
Md5 m = new Md5();
System.out.println("MD5 Test suite:");
System.out.println("MD5(\"\"):" + m.getMD5(""));
System.out.println("MD5(\"test\"):" + m.getMD5("test")+"几位数:"+m.getMD5("test").length());
System.out.println("MD5(\"abc\"):" + m.getMD5("abc"));
System.out.println("MD5(\"message digest\"):" + m.getMD5("message digest"));
System.out.println("MD5(\"abcdefghijklmnopqrstuvwxyz\"):" +
m.getMD5("abcdefghijklmnopqrstuvwxyz"));
System.out.println(
"MD5(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"):" +
m.getMD5(
"admin"));
}
}
分享到:
相关推荐
java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密方法 java Md5加密...
java Md5加密方法 java Md5加密方法java Md5加密方法 java Md5加密方法java Md5加密方法 java Md5加密方法java Md5加密方法 java Md5加密方法java Md5加密方法 java Md5加密方法java Md5加密方法 java Md5加密方法...
java md5 加密后转为16进制
2. **Java中的MD5加密**:在Java中,可以使用`java.security.MessageDigest`类来实现MD5加密。首先,需要创建一个MD5实例,然后更新要加密的字节数组,最后获取并转换成十六进制字符串。 ```java import java....
Java Md5加密工具类
Java MD5 加密是一种常见的数据哈希处理技术,用于生成固定长度的数字指纹,以确保信息的完整性和安全性。MD5(Message-Digest Algorithm 5)由Ronald Rivest在1991年设计,虽然它现在被认为在某些场景下不够安全,...
下面是一个简单的Java MD5加密的代码示例,对应于你提供的`TestMD5.java`文件: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class TestMD5 { public ...
下面我们将详细讨论Java中MD5加密的原理、使用场景以及如何实现。 MD5加密的基本原理: MD5算法是一种非对称的加密算法,它将输入的信息通过一系列复杂的数学运算,最终得到一个128位的摘要信息,通常以32位的16...
在Java中,实现MD5加密通常需要用到`java.security.MessageDigest`类。下面我们将详细探讨如何在Java环境中使用MD5进行密码加密: 1. 导入必要的库: 首先,我们需要导入`java.security.MessageDigest`和`java....
**JAVA MD5加密** MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它将任意长度的输入转化为固定长度的输出,通常是一个128位的二进制数,以32位十六进制数的形式表示。在JAVA中,MD5主要用于数据的...
在Java中,可以使用java.security.MessageDigest类来实现MD5加密。以下是一个简单的MD5加密步骤: 1. 引入`java.security`包和`javax.crypto`包。 2. 创建`MessageDigest`实例,指定算法为MD5。 3. 更新要加密的...
js java MD5加密 解决中文不一致问题 验签 只有英文 数字的可以忽略了
java MD5加密 代码实例 没有bug 典型例子
能直接在java的应用程序中使用的MD5加密实现的jar包, 调用方法:转化成MD5:MD5.getEncryptedPwd(user.getPassword()) MD5验证:MD5.validPassword(password, user.getPassword())
Java工具类,它不仅实现了MD5加密,更创新性地接纳String... inputStrs,让你能一次性加密多个字符串。 1. 一键加密,多值无忧 告别繁杂,拥抱简洁。我们的Java MD5加密工具类以String... inputStrs为武器,打破了...
用java封装的MD5加密工具包,创建对象,传递要加密的字符串,即可返回32位大写的MD5加密后的字符串
java MD5 加密 完整源代码 经本人测试 运行完全没问题