MD5和SHA-1加密算法实现:
步骤一:首先定义一个算法接口类
/**
*
*/
package com.client;
public interface IMessageDigest {
/**
* 生成摘要
* @param src
* @return
*/
public String genMessageDigest(byte[] src) throws Exception;
/**
* 摘要的较验
* @param src
* @param dest
* @return
*/
public boolean validateMessageDigest(byte[] src,String dest) throws Exception;
}
步骤二:定义一个通用转十六进制工具类
package com.client;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
public class ToolsUtil {
/**
* Converts a byte array to hex string.
*
* @param b -
* the input byte array
* @return hex string representation of b.
*/
public static String toHexString(byte[] b) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
sb.append(ToolsUtil.HEX_CHARS.charAt(b[i] >>> 4 & 0x0F));
sb.append(ToolsUtil.HEX_CHARS.charAt(b[i] & 0x0F));
}
return sb.toString();
}
/**
* Converts a hex string into a byte array.
*
* @param s -
* string to be converted
* @return byte array converted from s
*/
public static byte[] toByteArray(String s) {
if(s.length() % 2 != 0 ) return new byte[s.length()/2];
byte[] buf = new byte[s.length() / 2];
int j = 0;
for (int i = 0; i < buf.length; i++) {
buf[i] = (byte) ((Character.digit(s.charAt(j++), 16) << 4) | Character
.digit(s.charAt(j++), 16));
}
return buf;
}
private static final String HEX_CHARS = "0123456789abcdef";
/**
* 生成密钥对
* @param algname
* @return
* @throws Exception
*/
KeyPair genPairKey(String algname,int length)throws Exception {
KeyPairGenerator kp = KeyPairGenerator.getInstance(algname);
kp.initialize(length);
KeyPair keys= kp.genKeyPair();
return keys;
}
}
步骤三:定义一个加密算法通用接口实现抽象类
package com.client;
import java.security.MessageDigest;
public abstract class AbstractMessageDigestImpl implements IMessageDigest {
public abstract String getAlgname();
public String genMessageDigest(byte[] src) throws Exception {
MessageDigest md = MessageDigest.getInstance(getAlgname());
return ToolsUtil.toHexString(md.digest(src));
}
public boolean validateMessageDigest(byte[] src, String dest)
throws Exception {
String mdes = genMessageDigest(src);
return MessageDigest.isEqual(ToolsUtil.toByteArray(mdes),
ToolsUtil.toByteArray(dest));
}
}
步骤四:MD5算法实现
package com.client;
public class MD5MessageDigestImple extends AbstractMessageDigestImpl {
private static final String algname="MD5";
public static void main(String[] args){
MD5MessageDigestImple it = new MD5MessageDigestImple();
byte[] cltxt = "123abc中国".getBytes();
String mtxt = null;
boolean re;
try{
mtxt = it.genMessageDigest(cltxt);
re=it.validateMessageDigest(cltxt, mtxt);
System.out.println(re);
}catch(Exception e){
e.printStackTrace();
}
}
@Override
public String getAlgname() {
// TODO Auto-generated method stub
return "MD5";
}
}
步骤六:SHA-1算法实现
/**
*
*/
package com.client;
public class SHAMessageDigestImpl extends AbstractMessageDigestImpl {
private final String algname ="SHA-1";
/* (non-Javadoc)
*/
@Override
public String getAlgname() {
return "SHA-1";
}
public static void main(String[] args){
SHAMessageDigestImpl it = new SHAMessageDigestImpl();
byte[] cltxt = "123abc中国".getBytes();
String mtxt = null;
boolean re;
try{
mtxt = it.genMessageDigest(cltxt);
System.out.println(mtxt.length());
re=it.validateMessageDigest(cltxt, mtxt);
System.out.println(re);
}catch(Exception e){
e.printStackTrace();
}
}
}
步骤七:main方法验证MD5和SHA-1加密算法
/**
*
*/
package com.test;
//import com.client.MD5BaseAlgorithms;
import com.client.MD5MessageDigestImple;
import com.client.SHAMessageDigestImpl;
public class TestMain {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
MD5MessageDigestImple md5MessageDigestImple = new MD5MessageDigestImple() ;
System.out.println("md5加密算法:" + md5MessageDigestImple.genMessageDigest("asdfasdf".getBytes()));
SHAMessageDigestImpl shaMessageDigestImpl = new SHAMessageDigestImpl() ;
System.out.println("SHA-1加密算法:" + shaMessageDigestImpl.genMessageDigest("asdfasdf".getBytes()));
}
}
步骤八:查看比较MD5和SHA-1加密算法所得到的结果,MD5加密算法得到32位密串, SHA-1加密算法得到40位密串。
md5加密算法:6a204bd89f3c8348afd5c77c717a097a
SHA-1加密算法:92429d82a41e930486c6de5ebda9602d55c39986