Java實際工作裡用到的幾種加密方式

SweetCukes發表於2024-06-12
1、Base64加密
  最簡單的加密方式,甚至可以說不是加密,只是一種用64個字元表示任意二進位制資料的方法。Base64編碼原理是將輸入字串按位元組切分,取得每個位元組對應的二進位制值(若不足8位元則高位補0),然後將這些二進位制數值串聯起來,再按照6位元一組進行切分(因為2^6=64),最後一組若不足6位元則末尾補0。將每組二進位制值轉換成對應的字元即可得到Base64編碼後的字串 。
  安全性:低 
  是否可逆:可
  程式碼片段:
 1 package com.geek.security.base64;
 2 
 3 import sun.misc.BASE64Decoder;
 4 import sun.misc.BASE64Encoder;
 5 
 6 import java.io.IOException;
 7 
 8 public class Base64Demo {
 9 
10     private static String src = "imooc security base64";
11 
12     public static void main(String[] args) throws IOException {
13         jdkBase64();
14     }
15 
16     private static void jdkBase64() throws IOException {
17         BASE64Encoder encoder = new BASE64Encoder();
18         String encode = encoder.encode(src.getBytes());
19         System.out.println("encode = " + encode);
20         // aW1vb2Mgc2VjdXJpdHkgYmFzZTY0
21 
22         BASE64Decoder decoder = new BASE64Decoder();
23         byte[] bytes = decoder.decodeBuffer(encode);
24         String decode = new String(bytes);
25         System.out.println("decode = " + decode);
26         // imooc security base64
27         System.out.println("bytes = " + bytes);
28         // [B@1b6d3586
29     }
30 
31 }

  使用jdk自帶sun包下相關類即可。

2、MD5加密

  MD5,全稱為Message-Digest Algorithm 5,也稱資訊-摘要演算法,是一種被廣泛應用於資訊保安領域的加密演算法。它可以產生出一個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸的完整一致性。MD5的特性包括壓縮性,即任意長度的資料算出的MD5值長度都是固定的;容易計算,即從原資料計算出MD5值很容易;抗修改性,對原資料進行任何改動,哪怕只修改1個位元組,所得到的MD5值都有很大區別;以及弱抗碰撞,已知原資料和其MD5值,想找到一個具有相同MD5值的資料(即偽造資料)是非常困難的。

  MD5演算法的安全性在於,的問題在於,MD5演算法存在碰撞攻擊的風險,即不同的輸入可能會產生相同的MD5雜湊值。這會導致安全性漏洞,使得攻擊者可以偽造資料或簽名。因此,儘管MD5的流程設計複雜且高效,透過多輪迴圈和非線性函式的處理,保證了生成的雜湊值具有較高的隨機性和安全性,但在面對現代計算能力的提升和密碼學研究的深入的情況下,MD5的安全性已經不再得到保證。

  安全性:中
  是否可逆:不可逆
  程式碼片段:
  
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Encryption {

    public static String encrypt(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(input.getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : messageDigest) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) {
                    sb.append('0');
                }
                sb.append(hex);
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        String input = "Hello, World!";
        String encryptedString = encrypt(input);
        System.out.println("Original string: " + input);
        System.out.println("Encrypted string: " + encryptedString);
    }
}

  使用java自帶的security包中相關類。

3、SHA加密

  SHA加密是一種單向雜湊函式,它將任意長度的資料轉換為一個16位元組的雜湊值。這種加密方式常用於檔案校驗、使用者身份驗證等場景。

  SHA加密演算法有很多版本,如SHA-0、SHA-1、SHA-2等。其中,SHA-1和SHA-2是應用最廣泛的版本。

  SHA-256加密演算法的工作原理如下:

  1. 首先,對輸入的資料進行初始化,將其分割成大小為512位的塊(如果資料長度不是512的倍數,則需要填充零以滿足這一要求)。

  2. 對每個塊執行雜湊函式,生成一個128位的雜湊值。

  3. 將所有塊的雜湊值連線起來,得到一個1024位的雜湊值。

  4. 對得到的1024位的雜湊值執行雜湊函式,得到最終的128位的雜湊值。

  SHA-256加密演算法提供了豐富的變體,包括不同大小的塊(如1024位、512位、256位等)、不同的雜湊函式(如SHA-256、SHA-3等)以及不同的填充方案(如PKCS#7、ISO/IEC 10177等)。

  安全性:低 
  是否可逆:可
  程式碼片段:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA1Encrypt {

    public static String sha1Encrypt(String input) {
        try {
            // 建立SHA1加密物件
            MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
            // 執行加密操作
            byte[] encrypt = sha1.digest(input.getBytes());
            // 將加密結果轉換為十六進位制字串
            StringBuilder sb = new StringBuilder();
            for (byte b : encrypt) {
                sb.append(String.format("%02x", b));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("SHA1加密演算法未找到", e);
        }
    }

    public static void main(String[] args) {
        String input = "Hello, World!";
        String encrypt = sha1Encrypt(input);
        System.out.println("SHA1加密結果:" + encrypt);
    }
}

  使用java自帶的security包中相關類。

  

  

相關文章