Java中几种常见的加密算法入门教程

Java中几种常见的加密算法(一)

前言

我们在使用java开发的过程,通常会用到的几种加密方式有:Base64,MD5,SHA,DES,RSA

下面我们来看看前面3种简单的加密方式!

1.Base64

严格意义上来说,Base64应该称不上是一种加密算法,它只是一种编码方式,能起到的安全作用很差,很容易破解,一般用于url的编码。

使用Base64加密

/**
  * @param textStr 要加密的字符串
  * @return 加密过后的字符串
  */
public static String base64Encode(String textStr) {
	return new String(Base64.getEncoder().encode(textStr.getBytes()));
}

使用Base64解密

/**
  * 
  * @param base64Str 要解密的Base64字符串
  * @return 解密后得到的字符串
  */
public static String base64Decode(String base64Str) {
    return new String(Base64.getDecoder().decode(base64Str));
}

2.MD5

MD5信息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

使用MD5加密

/**
  *
  * @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再加密一把,得到相应的字符串。

3.SHA

SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域。虽然,SHA与MD5通过碰撞法都被破解了, 但是SHA仍然是公认的安全加密算法,较之MD5更为安全。

使用SHA加密

/**
  * 
  * @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);
}

以上就是简单的介绍了,请大家多多指教。

你可能感兴趣的:(java,Java常见的几种加密算法)