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加密演算法的工作原理如下:
-
首先,對輸入的資料進行初始化,將其分割成大小為512位的塊(如果資料長度不是512的倍數,則需要填充零以滿足這一要求)。
-
對每個塊執行雜湊函式,生成一個128位的雜湊值。
-
將所有塊的雜湊值連線起來,得到一個1024位的雜湊值。
-
對得到的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包中相關類。