1、MD5(Message Digest Algorithm)加密演算法
是一種單向加密演算法,只能加密不能解密,範例
/** * MD5简单加密 * @param content 加密内容 * @return String */ public static String md5Encrypt(final String content) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance(ALGORITHM_MD5); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } // md5.update(text.getBytes()); //digest()最后返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符 //BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值 BigInteger digest = new BigInteger(md5.digest(content.getBytes())); //32位 return digest.toString(16); }
2、BASE64進行加密/解密
通常用作對二進位資料進行加密,範例
/** * base64加密 * @param content 待加密内容 * @return byte[] */ public static byte[] base64Encrypt(final String content) { return Base64.getEncoder().encode(content.getBytes()); } /** * base64解密 * @param encoderContent 已加密内容 * @return byte[] */ public static byte[] base64Decrypt(final byte[] encoderContent) { return Base64.getDecoder().decode(encoderContent); }
3、DES(Data Encryption Standard)對稱加密/解密
資料加密標準演算法,和BASE64最明顯的差異就是有一個工作金鑰,該金鑰既用於加密、也用於解密,並且要求金鑰是長度至少大於8位元的字串,範例
/** * DES加密 * @param key 秘钥key * @param content 待加密内容 * @return byte[] */ public static byte[] DESEncrypt(final String key, final String content) { return processCipher(content.getBytes(), getSecretKey(key), Cipher.ENCRYPT_MODE , ALGORITHM_DES); } /** * DES解密 * @param key 秘钥key * @param encoderContent 已加密内容 * @return byte[] */ public static byte[] DESDecrypt(final String key, final byte[] encoderContent) { return processCipher(encoderContent, getSecretKey(key), Cipher.DECRYPT_MODE, ALGORITHM_DES); }
4、RSA非對稱加密/解密
非對稱加密演算法的典型代表,既能加密、又能解密。而對稱加密演算法例如DES的明顯差異在於用於加密、解密的金鑰是不同的。使用RSA演算法,只要金鑰夠長(一般要求1024bit),加密的資訊是不能被破解的。範例
/** * RSA加密 * @param content 待加密内容 * @return byte[] */ public static byte[] RSAEncrypt(final String content) { return processCipher(content.getBytes(), keyPair.getPrivate(), Cipher.ENCRYPT_MODE , ALGORITHM_RSA); } /** * RSA解密 * @param encoderContent 已加密内容 * @return byte[] */ public static byte[] RSADecrypt(final byte[] encoderContent) { return processCipher(encoderContent, keyPair.getPublic(), Cipher.DECRYPT_MODE, ALGORITHM_RSA); }
5、SHA(Secure Hash Algorithm,安全雜湊演算法)
數位簽章等密碼學應用中重要的工具,被廣泛地應用於電子商務等資訊安全領域,範例
/** * SHA加密 * @param content 待加密内容 * @return String */ public static String SHAEncrypt(final String content) { try { MessageDigest sha = MessageDigest.getInstance(ALGORITHM_SHA); byte[] sha_byte = sha.digest(content.getBytes()); StringBuffer hexValue = new StringBuffer(); for (byte b : sha_byte) { //将其中的每个字节转成十六进制字符串:byte类型的数据最高位是符号位,通过和0xff进行与操作,转换为int类型的正整数。 String toHexString = Integer.toHexString(b & 0xff); hexValue.append(toHexString.length() == 1 ? "0" + toHexString : toHexString); } return hexValue.toString(); // StringBuffer hexValue2 = new StringBuffer(); // for (int i = 0; i < sha_byte.length; i++) { // int val = ((int) sha_byte[i]) & 0xff; // if (val < 16) { // hexValue2.append("0"); // } // hexValue2.append(Integer.toHexString(val)); // } // return hexValue2.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; }
6、HMAC(Hash Message Authentication Code,散列訊息鑑別碼)
使用一個金鑰產生一個固定大小的小資料塊,即MAC,並將其加入到訊息中,然後傳輸。接收者利用與發送方共享的金鑰進行鑑別認證,範例
/** * HMAC加密 * @param key 给定秘钥key * @param content 待加密内容 * @return String */ public static byte[] HMACEncrypt(final String key, final String content) { try { SecretKey secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM_MAC); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); //初始化mac mac.init(secretKey); return mac.doFinal(content.getBytes()); } catch (Exception e) { e.printStackTrace(); } return null; }
測試程式碼:
public static void main(String[] args) { //md5简单加密 String text = "i am text"; System.out.println(EnDecoderUtil.md5Encrypt(text)); //base64进行加密解密,通常用作对二进制数据进行加密 byte[] base64Encrypt = EnDecoderUtil.base64Encrypt("123456789"); String toHexString = HexUtils.toHexString(base64Encrypt); System.out.println(toHexString); byte[] base64Decrypt = EnDecoderUtil.base64Decrypt(base64Encrypt); System.out.println(new String(base64Decrypt)); //DES对称加密/解密 //要求key至少长度为8个字符 String key = "123456789"; //加密 byte[] encode_bytes = EnDecoderUtil.DESEncrypt(key, "Hello, DES"); System.out.println(Base64.getEncoder().encodeToString(encode_bytes)); //解密 byte[] decode_bytes = EnDecoderUtil.DESDecrypt(key, encode_bytes); System.out.println(new String(decode_bytes)); //RSA //数据使用私钥加密 byte[] en_byte = EnDecoderUtil.RSAEncrypt("Hi, RSA"); System.out.println(Base64.getEncoder().encodeToString(en_byte)); //用户使用公钥解密 byte[] de_byte = EnDecoderUtil.RSADecrypt(en_byte); System.out.println(new String(de_byte)); //服务器根据私钥和加密数据生成数字签名 byte[] sign_byte = EnDecoderUtil.getSignature(en_byte); System.out.println(Base64.getEncoder().encodeToString(sign_byte)); //用户根据公钥、加密数据验证数据是否被修改过 boolean verify_result = EnDecoderUtil.verifySignature(en_byte, sign_byte); System.out.println(verify_result); //SHA String sha = EnDecoderUtil.SHAEncrypt("Hi, RSA"); System.out.println(sha); //HMAC byte[] mac_bytes = EnDecoderUtil.HMACEncrypt(key, "Hi, HMAC"); System.out.println(HexUtils.toHexString(mac_bytes)); }
更多java知識請關注java基礎教學欄目。
以上是java怎麼加密的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了各種Java垃圾收集算法(串行,並行,CMS,G1,ZGC),它們的性能影響和適合大量堆的應用。

本文討論了Java虛擬機(JVM),詳細介紹了其在不同平台運行Java程序中的作用。它說明了JVM的內部流程,密鑰組件,內存管理,垃圾收集和性能Optimizatio

Java的Nashorn Engine可以在Java應用程序中啟用JavaScript腳本。關鍵步驟包括設置Nashorn,管理腳本和優化性能。主要問題涉及安全性,內存管理和未來兼容性

Java的Try-with-Resources通過自動關閉文件流或數據庫連接等資源來簡化資源管理,從而提高代碼可讀性和可維護性。

Java枚舉代表固定的值集,通過自定義方法和構造函數提供類型安全性,可讀性和其他功能。它們增強了代碼組織,可用於開關語句中以進行有效的價值處理。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

記事本++7.3.1
好用且免費的程式碼編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器