我们在使用java开发的过程,通常会用到的几种加密方式有:Base64,MD5,SHA,DES,RSA
下面我们来看看前面3种简单的加密方式!
严格意义上来说,Base64应该称不上是一种加密算法,它只是一种编码方式,能起到的安全作用很差,很容易破解,一般用于url的编码。
/**
* @param textStr 要加密的字符串
* @return 加密过后的字符串
*/
public static String base64Encode(String textStr) {
return new String(Base64.getEncoder().encode(textStr.getBytes()));
}
/**
*
* @param base64Str 要解密的Base64字符串
* @return 解密后得到的字符串
*/
public static String base64Decode(String base64Str) {
return new String(Base64.getDecoder().decode(base64Str));
}
MD5信息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
/**
*
* @param textStr 要使用MD5加密的字符串
* @return 加密后得到的字符串
* @throws NoSuchAlgorithmException
*/
public static String md5Encode(String textStr) throws NoSuchAlgorithmException {
char[] convert = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(textStr.getBytes(StandardCharsets.UTF_8));
byte[] md = messageDigest.digest();
char[] chars = new char[md.length * 2];
int k = 0;
// 将加密后的字符数组转换成十六进制的字符串形式
for (byte b : md) {
chars[k++] = convert[b >>> 4 & 0xf];
chars[k++] = convert[b & 0xf];
}
return new String(chars);
}
通常我们不直接使用上述MD5加密。通常将MD5产生的字节数组交给BASE64再加密一把,得到相应的字符串。
SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域。虽然,SHA与MD5通过碰撞法都被破解了, 但是SHA仍然是公认的安全加密算法,较之MD5更为安全。
/**
*
* @param textStr 要使用SHA加密的字符串
* @return 加密后得到的字符串
* @throws NoSuchAlgorithmException
*/
public static String shaEncode(String textStr) throws NoSuchAlgorithmException {
char[] convert = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
MessageDigest messageDigest = MessageDigest.getInstance("SHA");
messageDigest.update(textStr.getBytes(StandardCharsets.UTF_8));
byte[] md = messageDigest.digest();
char[] chars = new char[md.length * 2];
int k = 0;
// 将加密后的字符数组转换成十六进制的字符串形式
for (byte b : md) {
chars[k++] = convert[b >>> 4 & 0xf];
chars[k++] = convert[b & 0xf];
}
return new String(chars);
}