Java基礎之加解密(三) SHA安全雜湊演算法
阿新 • • 發佈:2019-01-22
介紹:安全雜湊演算法(Secure Hash Algorithm)主要適用於數字簽名標準(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預對映或資訊),並把它們轉化為長度較短、位數固定的輸出序列即雜湊值(也稱為資訊摘要或資訊認證程式碼)的過程
各個實現廠家:
Bouncy Castle也是對jdk的補充,commons codec同樣是對jdk的簡化。
實現程式碼:
HSA與MD同樣的是單向的,只能進行加密,不能進行解密。package dms.java.base.security; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Security; import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; import org.bouncycastle.crypto.digests.SHA1Digest; import org.bouncycastle.jce.provider.BouncyCastleProvider; /** * 使用1.jdk 2.bouncy castle 3.commons codec 實現sha加密演算法 * 下面以sha1為例,其他版本類似 * @Title: SHATest.java * @Package dms.java.base.security * @Description: * @author BrightSt * @date 2017年3月26日 下午3:06:01 * @version V1.0 */ public class SHATest { private static String src = "這是我的內容"; public static void main(String[] args) { jdkSha(); bouncyCastleSha(); commonsCodecSha(); addProvider(); } /** * jdk 實現方式 */ public static void jdkSha(){ try { MessageDigest me = MessageDigest.getInstance("SHA"); me.update(src.getBytes()); System.out.println("jdk sha1:"+Hex.encodeHexString(me.digest())); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } /** * bouncy castle 實現方式 */ public static void bouncyCastleSha(){ SHA1Digest d = new SHA1Digest(); d.update(src.getBytes(),0,src.getBytes().length); byte[] shaDecode = new byte[d.getDigestSize()]; d.doFinal(shaDecode, 0); System.out.println("bouncyCastle sha1 : "+org.bouncycastle.util.encoders.Hex.toHexString(shaDecode)); } /** * commons codec 實現方式 */ public static void commonsCodecSha(){ try { // MessageDigest md = DigestUtils.getSha1Digest(); // md.update(src.getBytes()); // System.out.println("commons codec sha :" + Hex.encodeHexString(md.digest())); // 上面簡化後 System.out.println("commons codec sha :" +DigestUtils.sha1Hex(src.getBytes())); } catch (Exception e) { e.printStackTrace(); } } /** * 給jdk增加實現廠商的方式 */ public static void addProvider(){ try { Security.addProvider(new BouncyCastleProvider()); MessageDigest md = MessageDigest.getInstance("SHA"); md.update(src.getBytes()); System.out.println("add provider sha : "+ Hex.encodeHexString(md.digest())); } catch (Exception e) { e.printStackTrace(); } } }
SHA雜湊演算法的應用:1.網站的安全證書:
2.訊息的傳送,先發送摘要資訊,在傳送原始資訊,進行比對。
3.聯合登入場景,可以在訊息內容里加入雙方約定的key和時間戳。