日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

加密算法

發布時間:2024/8/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 加密算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在開發的過程中避免不了使用加密進行操作,例如密碼,文件加密,軟件激活,因為加密算法快上百種就不細說了,講解下常用算法
簡介
算法都是不能逆推的,既然不能破解為什么不安全,因為可以碰撞,就是加密算法進行反向查詢,案例:山東大學王小云教授發現了md5的碰撞原理。具體碰撞過程參考:鏈接

算法簡介算法類型安全系數應用場景
base64Base64編碼是從二進制到字符的過程,可以互相轉換,其實不是算法圖片存儲,參數非原始顯示
md5message-digest algorithm 5(信息-摘要算法)MD5哈希函數將任意長度的二進制字符串映射為固定長度的小型二進制字符串。由32位16進制組成散列算法,或者叫做哈希算法 (Hash算法)md5在md4基礎上改進哈希算法★★文件下載簽名校驗完整性
SHA-1安全哈希算法(Secure Hash Algorithm)sha-1是160位(160bit)的哈希值哈希算法★★☆文件下載簽名校驗完整性
SHA-2安全哈希算法(Secure Hash Algorithm)算法為SHA-224、SHA-256、SHA-384和SHA-512哈希算法★★★文件下載簽名校驗完整性
HMACHMAC是密鑰相關的哈希運算消息認證碼,HMAC運算利用哈希算法,以一個密鑰和一個消息為輸入,生成一個消息摘要作為輸出。(HmacMD5,HmacSHA1,HmacSHA224,HmacSHA256,HmacSHA384,HmacSHA512)哈希算法★★★☆密碼
PBKDF2PBKDF2應用一個偽隨機函數以導出密鑰。導出密鑰的長度本質上是沒有限制的(但是,導出密鑰的最大有效搜索空間受限于基本偽隨機函數的結構)(PBKDF2WithHmacSHA1,PBKDF2WithHmacSHA256,PBKDF2WithHmacSHA512)哈希算法★★★★密碼
BCryptbcrypt是一個跨平臺的文件加密工具。由它加密的文件可在所有支持的操作系統和處理器上進行轉移。它的口令必須是8至56個字符,并將在內部被轉化為448位的密鑰。Blowfish算法★★★★主要文件加密
Scryptscrpyt算法是由著名的FreeBSD黑客 Colin Percival為他的備份服務 Tarsnap開發的,當初的設計是為了降低CPU負荷,盡量少的依賴cpu計算,利用CPU閑置時間進行計算,因此scrypt不僅計算所需時間長,而且占用的內存也多,使得并行計算多個摘要異常困難,因此利用rainbow table進行暴力攻擊更加困難。密鑰派生函數 參考:鏈接★★★★☆主要虛擬貨幣,密碼,加密

算法可靠性參考:鏈接

  • maven
  • <dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.12</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-crypto</artifactId><version>1.0.0</version></dependency>

    官方參考 :http://commons.apache.org/proper/commons-codec/
    官方參考 :http://commons.apache.org/proper/commons-crypto/
    apache提供的加密沒有BCrypt算法官方使用的Scrypt算法

    說下commons-codec的簡單使用其它實例參考官方

    /*** 編碼base64** @param data 需要編碼的數據 如果是對象需要轉換JSON* @return 編碼之后的內容*/public static String encodeBase64(Object data) {try {if (Objects.nonNull(data)) {return Base64.encodeBase64String(data.toString().getBytes(StandardCharsets.UTF_8));}} catch (Exception e) {e.printStackTrace();}return null;}/*** 解碼base64** @param data 解碼的內容 如果是對象需要轉換JSON* @return 解碼之后的數據*/public static String decodeBase64(Object data) {try {if (Objects.nonNull(data)) {return Arrays.toString(Base64.decodeBase64(data.toString()));}} catch (Exception e) {e.printStackTrace();}return null;}

    算法可以嵌套多個,提供多密匙,使加密更加可靠。

    PBKDF2算法在spring security 密碼加密中有使用

    //spring securiy 默認算法 //通過此工廠PasswordEncoderFactories.createDelegatingPasswordEncoder();調用 public class PasswordEncoderFactories {@SuppressWarnings("deprecation")public static PasswordEncoder createDelegatingPasswordEncoder() {String encodingId = "bcrypt";Map<String, PasswordEncoder> encoders = new HashMap<>();encoders.put(encodingId, new BCryptPasswordEncoder());encoders.put("ldap", new org.springframework.security.crypto.password.LdapShaPasswordEncoder());encoders.put("MD4", new org.springframework.security.crypto.password.Md4PasswordEncoder());encoders.put("MD5", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("MD5"));encoders.put("noop", org.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance());encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());encoders.put("scrypt", new SCryptPasswordEncoder());encoders.put("SHA-1", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-1"));encoders.put("SHA-256", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-256"));encoders.put("sha256", new org.springframework.security.crypto.password.StandardPasswordEncoder());return new DelegatingPasswordEncoder(encodingId, encoders);}private PasswordEncoderFactories() {}}

    如果你的項目集成security寫個簡單例子:

    //strength強度,密碼迭代次數 between 4 and 31BCryptPasswordEncoder bCrypt = new BCryptPasswordEncoder(BCryptPasswordEncoder.BCryptVersion.$2Y, 31, random);//編碼,BCryptVersion.$2Y默認會作為鹽(密匙)參考源碼bCrypt.encodeString encode = bCrypt.encode("123456");//校驗bCrypt.matches("123456",encode);

    總結

    以上是生活随笔為你收集整理的加密算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。