加密算法有三大类:对称加密、非对称加密、Hash加密(摘要加密算法)
这篇文章讲的是如何进行MD5和SHA进行加密,它们都属于Hash加密而Hash加密和其他加密算法不同的就是单向算法就是我们可以通过hash算法将一段内容生成一个特定长度的唯一hash值,我们却不能将这个hash值重新解密成原值。所以我们最常用的就是用户的密码加密后储存和信息是否完整性校验等操作了。其他的Hash算法有MD2、MD4、SHA、HAVAL等。
好了,不多说了接下来看一下代码如何去实现加密
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class EncryptAndDecryptUtil {
/**
* MD5加密
*/
public static final String MD5_KEY ="MD5";
/**
* SHA加密
*/
public static final String SHA_KEY ="SHA";
/**
* 加密的内容
*/
private static String content = "我就是要被加密的内容";
//-----------------MD5&SHA 加密学习,单向加密不可逆----
/**
*
* 创建人:yusq
* @Title: encryptionMD5OrSHA
* @Description: TODO(MD5,SHA不可逆加密)
* @param content 要加密的内容
* @param type 要加密的方式
* @return
*/
public static byte[] encryptionMD5OrSHA(String content,String type){
byte[] data = null;
try {
MessageDigest md5Sha = null;
//sha
if("sha".equals(type)){
md5Sha = MessageDigest.getInstance(SHA_KEY);
}else{
//其他的都是MD5
md5Sha = MessageDigest.getInstance(MD5_KEY);
}
md5Sha.update(content.getBytes());
data = md5Sha.digest();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
public static void main(String[] args){
/**
* type 传空值表示用MD5加密
* 将包含 BigInteger 的二进制补码表示形式的字节数组转换为 BigInteger
*/
BigInteger md5 = new BigInteger(encryptionMD5OrSHA(content,null));
/**
* 打印16进制的结果,不写 默认10进制
*/
System.out.println("MD5加密后:"+md5.toString(16));
BigInteger sha = new BigInteger(encryptionMD5OrSHA(content,"sha"));
System.out.println("SHA加密后:"+sha.toString(16));
}