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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 实现 pbkdf2_sha256加密验证算法

發(fā)布時間:2023/12/31 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 实现 pbkdf2_sha256加密验证算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

import java.nio.charset.Charset; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import java.security.spec.KeySpec; import java.util.Base64; import java.util.Random;import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec;/*** pbkdf2_sha256加密驗證算法* @author Administrator**/ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Pbkdf2Sha256 {private static final Logger logger=LoggerFactory.getLogger(Pbkdf2Sha256.class);//默認(rèn)迭代計數(shù)為 20000private static final Integer DEFAULT_ITERATIONS = 20000;//算法名稱private static final String algorithm = "pbkdf2_sha256";/*** 獲取密文* @param password 密碼明文* @param salt 加鹽* @param iterations 迭代計數(shù)* @return*/private static String getEncodedHash(String password, String salt, int iterations) {// Returns only the last part of whole encoded passwordSecretKeyFactory keyFactory = null;try {keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");} catch (NoSuchAlgorithmException e) {logger.error("Could NOT retrieve PBKDF2WithHmacSHA256 algorithm",e);}KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt.getBytes(Charset.forName("UTF-8")), iterations, 256);SecretKey secret = null;try {secret = keyFactory.generateSecret(keySpec);} catch (InvalidKeySpecException e) {logger.error("Could NOT generate secret key",e);}byte[] rawHash = secret.getEncoded();byte[] hashBase64 = Base64.getEncoder().encode(rawHash);return new String(hashBase64);}/*** 密文加鹽* @return String*/private static String getsalt(){int length = 12;Random rand = new Random();char[] rs = new char[length];for(int i = 0; i < length; i++){int t = rand.nextInt(3);if (t == 0) {rs[i] = (char)(rand.nextInt(10)+48);} else if (t == 1) {rs[i] = (char)(rand.nextInt(26)+65);} else {rs[i] = (char)(rand.nextInt(26)+97);}}return new String(rs);}/*** rand salt* iterations is default 20000* @param password* @return*/public static String encode(String password) {return encode(password, getsalt());}/*** rand salt* @param password* @return*/public static String encode(String password,int iterations) {return encode(password, getsalt(),iterations);}/*** iterations is default 20000* @param password* @param salt* @return*/public static String encode(String password, String salt) {return encode(password, salt, DEFAULT_ITERATIONS);}/*** * @param password 密碼明文* @param salt 加鹽* @param iterations 迭代計數(shù)* @return*/public static String encode(String password, String salt, int iterations) {// returns hashed password, along with algorithm, number of iterations and saltString hash = getEncodedHash(password, salt, iterations);return String.format("%s$%d$%s$%s", algorithm, iterations, salt, hash);}/*** 校驗密碼是否合法* @param password 明文* @param hashedPassword 密文* @return*/public static boolean verification(String password, String hashedPassword) {// hashedPassword consist of: ALGORITHM, ITERATIONS_NUMBER, SALT and// HASH; parts are joined with dollar character ("$")String[] parts = hashedPassword.split("\\$");if (parts.length != 4) {// wrong hash formatreturn false;}Integer iterations = Integer.parseInt(parts[1]);String salt = parts[2];String hash = encode(password, salt, iterations);return hash.equals(hashedPassword);}

?

轉(zhuǎn)載于:https://my.oschina.net/haopeng/blog/2873022

總結(jié)

以上是生活随笔為你收集整理的java 实现 pbkdf2_sha256加密验证算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。