您的位置:首页 > 编程语言 > Java开发

JAVA 几种常见加密算法

2015-10-13 11:50 323 查看
几种常见加密算法:

1、MD5:Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5用的是哈希函数,在计算机网络中应用较多的不可逆加密算法有RSA公司发明的MD5算法和由美国国家技术标准研究所建议的安全散列算法SHA。

2、SHA1:安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。 SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。

3、Base64:编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

  然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

  为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充’=’号,并将标准Base64中的“+”和“/”分别改成了“*”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

  另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。

  此外还有一些变种,它们将“+/”改为“-”或“.”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

代码模块如下:

//MD5摘要后转大写
String str0 = DigestUtils.md5Hex("abc").toUpperCase();   System.out.println(str0);

//SHA1
String str1=DigestUtils.shaHex("abc");   System.out.println(str1);

//Base64加密
String str2= "abc"; // abc为要加密的字符串
//一般加密
byte[] b = Base64.encodeBase64(str2.getBytes(), true);

//URL参数传递避免特殊符号
byte[] b = Base64.encodeBase64URLSafe(str2.getBytes());   System.out.println(new String(b));

//Base64解密
String str3 = "YWJj"; // YWJj为要解密的字符串
byte[] b1 = Base64.decodeBase64(str3.getBytes());   System.out.println(new String(b1));


===================

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import sun.misc.BASE64Decoder;

public class PasswdUtil {
/**
* SHA加密
* @param decript
* @return
*/
public static String SHA1(String input) {
if(input == null){
return "";
}
try {
MessageDigest digest = java.security.MessageDigest
.getInstance("SHA-1");
digest.update(input.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();

} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
/**
* MD5加密
* @param input
* @return
*/
public static String MD5(String input) {
if(input == null){
return "";
}
try {
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(input.getBytes());
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < md.length; i++) {
String shaHex = Integer.toHexString(md[i] & 0xFF);

9e9b
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}

/**
* BASE64解密
*/
public static String decryptBASE64(String input) {
if (input == null){
return "";
}
BASE64Decoder decoder = new BASE64Decoder();
String pwd = "";
try {
byte[] b = decoder.decodeBuffer(input);
pwd = new String(b);
} catch (Exception e) {
e.printStackTrace();
}

return pwd;
}

/**
* BASE64加密
*/
public static String encryptBASE64(String input) {
if(input == null){
return "";
}
return new sun.misc.BASE64Encoder().encode(input.getBytes());

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MD5 SHA BASE64 加密