java--加密解密

加 密算法一般分爲對稱性加密算法和非對稱性加密算法,對於對稱性加密算法,信息接收雙方都需事先知道密匙和加解密算法且其密匙是相同的,以後即是對數據進行 加解密了。非對稱算法與之不一樣,發送雙方A,B事先均生成一堆密匙,而後A將本身的公有密匙發送給B,B將本身的公有密匙發送給A,若是A要給B發送消 息,則先須要用B的公有密匙進行消息加密,而後發送給B端,此時B端再用本身的私有密匙進行消息解密,B向A發送消息時爲一樣的道理。java

幾種對稱性加密算法:AES,DES,3DES算法

DES是一種分組數據加密技術(先將數據分紅固定長度的小數據塊,以後進行加密),速度較快,適用於大量數據加密,而3DES是一種基於DES的加密算法,使用3個不一樣密匙對同一個分組數據塊進行3次加密,如此以使得密文強度更高。apache

相較於DES和3DES算法而言,AES算法有着更高的速度和資源使用效率,安全級別也較之更高了,被稱爲下一代加密標準。安全

幾種非對稱性加密算法:RSA,DSA,ECC工具

RSA和DSA的安全性及其它各方面性能都差很少,而ECC較之則有着不少的性能優越,包括處理速度,帶寬要求,存儲空間等等。性能

幾種線性散列算法(簽名算法):MD5,SHA1,HMAC編碼

這幾種算法只生成一串不可逆的密文,常常用其效驗數據傳輸過程當中是否通過修改,由於相同的生成算法對於同一明文只會生成惟一的密文,若相同算法生成的密文不一樣,則證實傳輸數據進行過了修改。一般在數據傳說過程前,使用MD5和SHA1算法均須要發送和接收數據雙方在數據傳送以前就知道密匙生成算法,而HMAC與之不一樣的是須要生成一個密匙,發送方用此密匙對數據進行摘要處理(生成密文),接收方再利用此密匙對接收到的數據進行摘要處理,再判斷生成的密文是否相同。加密

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.security.MessageDigest; /** * 加解密工具類 */
public class EncryptUtil { public static final String MD5 = "MD5"; public static final String HmacMD5 = "HmacMD5"; //編碼格式;默認使用uft-8
    public static String charset = "utf-8"; /** * md5加密算法進行加密(不可逆) * * @param res 須要加密的原文 * @return
     */
    public static String getMd5(String res) { return messageDigest(res, MD5); } /** * md5加密算法進行加密(不可逆) * * @param res 須要加密的原文 * @param key 祕鑰 * @return
     */
    public static String getSoltMd5(String res, String key) { return keyGeneratorMac(res, HmacMD5, key); } /** * 使用MessageDigest進行單向加密(無密碼) * * @param res 被加密的文本 * @param algorithm 加密算法名稱 * @return
     */
    private static String messageDigest(String res, String algorithm) { try { MessageDigest md = MessageDigest.getInstance(algorithm); byte[] resBytes = charset == null ? res.getBytes() : res.getBytes(charset); return Base64.encode(md.digest(resBytes)); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 使用KeyGenerator進行單向/雙向加密(可設密碼) * * @param res 被加密的原文 * @param algorithm 加密使用的算法名稱 * @param key 加密使用的祕鑰 * @return
     */
    private static String keyGeneratorMac(String res, String algorithm, String key) { try { SecretKey sk = null; if (key == null) { KeyGenerator kg = KeyGenerator.getInstance(algorithm); sk = kg.generateKey(); } else { byte[] keyBytes = charset == null ? key.getBytes() : key.getBytes(charset); sk = new SecretKeySpec(keyBytes, algorithm); } Mac mac = Mac.getInstance(algorithm); mac.init(sk); byte[] result = mac.doFinal(res.getBytes()); return Base64.encode(result); } catch (Exception e) { e.printStackTrace(); } return null; } }
相關文章
相關標籤/搜索