package com.lavasoft.common.security;
/**
* MD5工具
*
* @author leizhimin 2010-6-3 11:10:29
*/
import java.security.MessageDigest;
public class MD5 {
/**
* MD5值计算<p>
* MD5的算法在RFC1321 中定义:
* 在RFC 1321中,给出了Test suite用来检验你的实现是否正确:
* MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
* MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
* MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
* MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
* MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
*
* @param res 源字符串
* @return md5值
*/
public final static String MD5(String res) {
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f'};
try {
byte[] strTemp = res.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[] md = mdTemp.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
String dd = new String(str);
return dd;
} catch (Exception e) {
return null;
}
}
public static void main(String[] args) {
System.out.println(MD5.MD5(""));
System.out.println(MD5.MD5("a"));
System.out.println(MD5.MD5("abc"));
}
}
package com.lavasoft.common.security;
import java.io.UnsupportedEncodingException;
/**
* Base64双向加密工具
*
* @author leizhimin 2010-6-3 14:10:11
*/
public class Base64 {
private static char[] base64EncodeChars = new char[]{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9', '+', '/'};
private static byte[] base64DecodeChars = new byte[]{
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1};
/**
* 加密
*
* @param data 明文的字节数组
* @return 密文字符串
*/
public static String encode(byte[] data) {
StringBuffer sb = new StringBuffer();
int len = data.length;
int i = 0;
int b1, b2, b3;
while (i < len) {
b1 = data[i++] & 0xff;
if (i == len) {
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
sb.append("==");
break;
}
b2 = data[i++] & 0xff;
if (i == len) {
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
sb.append("=");
break;
}
b3 = data[i++] & 0xff;
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
sb.append(base64EncodeChars[b3 & 0x3f]);
}
return sb.toString();
}
/**
* 解密
*
* @param str 密文
* @return 明文的字节数组
* @throws UnsupportedEncodingException
*/
public static byte[] decode(String str) throws UnsupportedEncodingException {
StringBuffer sb = new StringBuffer();
byte[] data = str.getBytes("US-ASCII");
int len = data.length;
int i = 0;
int b1, b2, b3, b4;
while (i < len) {
/* b1 */
do {
b1 = base64DecodeChars[data[i++]];
} while (i < len && b1 == -1);
if (b1 == -1) break;
/* b2 */
do {
b2 = base64DecodeChars
[data[i++]];
} while (i < len && b2 == -1);
if (b2 == -1) break;
sb.append((char) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
/* b3 */
do {
b3 = data[i++];
if (b3 == 61) return sb.toString().getBytes("iso8859-1");
b3 = base64DecodeChars[b3];
} while (i < len && b3 == -1);
if (b3 == -1) break;
sb.append((char) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
/* b4 */
do {
b4 = data[i++];
if (b4 == 61) return sb.toString().getBytes("iso8859-1");
b4 = base64DecodeChars[b4];
} while (i < len && b4 == -1);
if (b4 == -1) break;
sb.append((char) (((b3 & 0x03) << 6) | b4));
}
return sb.toString().getBytes("iso8859-1");
}
public static void main(String[] args) throws UnsupportedEncodingException {
String s = "abcd";
System.out.println("加密前:" + s);
String x = encode(s.getBytes());
System.out.println("加密后:" + x);
String x1 = new String(decode(x));
System.out.println("解密后:" + x1);
}
}
package com.lavasoft.common.security;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import java.security.Key;
import java.security.SecureRandom;
/**
* 使用3DES加密与解密,可对byte[],String类型进行加密与解密 密文可使用String,byte[]存储.
*
* @author leizhimin 2010-6-3 11:10:54
*/
public class ThreeDES {
private Key key; //密钥
/**
* 根据参数生成KEY
*
* @param strKey 密钥字符串
*/
public void getKey(String strKey) {
try {
KeyGenerator _generator = KeyGenerator.getInstance("DES");
_generator.init(new SecureRandom(strKey.getBytes()));
this.key = _generator.generateKey();
_generator = null;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 加密String明文输入,String密文输出
*
* @param strMing String明文
* @return String密文
*/
public String getEncString(String strMing) {
byte[] byteMi = null;
byte[] byteMing = null;
String strMi = "";
BASE64Encoder base64en = new BASE64Encoder();
try {
byteMing = strMing.getBytes("UTF8");
byteMi = this.getEncCode(byteMing);
strMi = base64en.encode(byteMi);
} catch (Exception e) {
e.printStackTrace();
} finally {
base64en = null;
byteMing = null;
byteMi = null;
}
return strMi;
}
/**
* 解密 以String密文输入,String明文输出
*
* @param strMi String密文
* @return String明文
*/
public String getDesString(String strMi) {
BASE64Decoder base64De = new BASE64Decoder();
byte[] byteMing = null;
byte[] byteMi = null;
String strMing = "";
try {
byteMi = base64De.decodeBuffer(strMi);
byteMing = this.getDesCode(byteMi);
strMing = new String(byteMing, "UTF8");
} catch (Exception e) {
e.printStackTrace();
} finally {
base64De = null;
byteMing = null;
byteMi = null;
}
return strMing;
}
/**
* 加密以byte[]明文输入,byte[]密文输出
*
* @param byteS byte[]明文
* @return byte[]密文
*/
private byte[] getEncCode(byte[] byteS) {
byte[] byteFina = null;
Cipher cipher;
try {
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byteFina = cipher.doFinal(byteS);
} catch (Exception e) {
e.printStackTrace();
} finally {
cipher = null;
}
return byteFina;
}
/**
* 解密以byte[]密文输入,以byte[]明文输出
*
* @param byteD byte[]密文
* @return byte[]明文
*/
private byte[] getDesCode(byte[] byteD) {
Cipher cipher;
byte[] byteFina = null;
try {
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key);
byteFina = cipher.doFinal(byteD);
} catch (Exception e) {
e.printStackTrace();
} finally {
cipher = null;
}
return byteFina;
}
public static void main(String[] args) {
ThreeDES des = new ThreeDES(); // 实例化一个对像
des.getKey("abcdefgasiainfo"); // 生成密匙
String strEnc = des.getEncString("abc");// 加密字符串,返回String的密文
System.out.println(strEnc);
String strDes = des.getDesString(strEnc);// 把String 类型的密文解密
System.out.println(strDes);
}
}
分享到:
相关推荐
java实现的base64,MD5,3des工具.zipjava实现的base64,MD5,3des工具.zipjava实现的base64,MD5,3des工具.zipjava实现的base64,MD5,3des工具.zip
Java实现的Base64、MD5、3DES三种工具
加解密工具集 对字符串做BASE64加密 解密 MD5加密 解密 DES加密 DES解密 AES加密 AES解密
js des加密,对应java des解密,js md5加密。借助大神的力量改装。DesUtil.java 对应的java解密。供学习参考,(注:js加密并不安全,如果安全要求高需启用https,)
java代码实现各种加密算法:AES加密解密,RAS加密解密,DES加密解密,MD5加密,Base64加密解密,异或加密解密
基于openssl静态库的DES+base64+MD5的加解密C++Demo,其中DES采用ECB模式,pkcs5padding的填充方法;兼容JAVA,C#的DES,可应用于与网络服务器通信过程中的加解密,并且已经验证OK。 与C#/java互通的DES加密解密代码。
提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、...加密解密,如MD5、BASE64,AES、DES等 - 4.文件操作,包括file、image、zip等 - 5.http - 6.jdbc - 7.json - 8.邮件 - 9.二维码、条形码 - 10.web
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) ...1.MD5 2.SHA 3.MAC 四。数字签名:JDK实现 1.RSA 2.DSA 3.ECDSA 五。对称加密算法: 1.3DES 2.AES 3.PBE
加密解密,如MD5、BASE64,AES、DES等 - 4.文件操作,包括file、image、zip等 - 5.http - 6.jdbc - 7.json - 8.邮件 - 9.二维码、条形码 - 10.web Java常用工具类大全,工作5年精心整理(最新版)
提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、...加密解密,如MD5、BASE64,AES、DES等 - 4.文件操作,包括file、image、zip等 - 5.http - 6.jdbc - 7.json - 8.邮件 - 9.二维码、条形码 - 10.web
java_security JAVA安全实现三种方式: ...1.MD5 2.SHA 3.MAC 四。数字签名:JDK实现 com.timliu.security.signature 1.RSA 2.DSA 3.ECDSA 五。对称加密算法:com.timliu.security.symmetric_encryption 1
md5,aes,des,des3,rsa,sha,base64加密解密实例,含有所需jar包,注释详细,导入项目直接可用。
DES加密解密,C#源码包含多种加密方式(DES、ECB、base64、md5等) des加密解密C#与java通用亲测
提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、...加密解密,如MD5、BASE64,AES、DES等 - 4.文件操作,包括file、image、zip等 - 5.http - 6.jdbc - 7.json - 8.邮件 - 9.二维码、条形码 - 10.web
提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、...加密解密,如MD5、BASE64,AES、DES等 - 4.文件操作,包括file、image、zip等 - 5.http - 6.jdbc - 7.json - 8.邮件 - 9.二维码、条形码 - 10.web
提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、...加密解密,如MD5、BASE64,AES、DES等 - 4.文件操作,包括file、image、zip等 - 5.http - 6.jdbc - 7.json - 8.邮件 - 9.二维码、条形码 - 10.web
如果只是想做加密解密,类似于Java的DES,网上jQuery有个jquery.base64.js。 (关于js的md5加密可以用jquery.md5.js,有兴趣可以找来测试一下)。 下面是测试: <html> <head> <title></...
java实现的String,Date,Number,base64、MD5、3DES等编码,以及ftp/sftp,log4j日志等等工具类
有 Base64、对称加密(DES、3DES、AES、SM4)、非对称加密(RSA、SM2)、Hash(MD4、MD5、HMAC、HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512、SHA、SHA1、SHA256、SHA384、SHA512、SM3)等实现。...
java中常用的base64编码,MD5,des加密,rsa 非对称加密