2019独角兽企业重金招聘Python工程师标准>>>


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);//默认迭代计数为 20000private static final Integer DEFAULT_ITERATIONS = 20000;//算法名称private static final String algorithm = "pbkdf2_sha256";/*** 获取密文* @param password 密码明文* @param salt 加盐* @param iterations 迭代计数* @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 迭代计数* @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);}

转载于:https://my.oschina.net/haopeng/blog/2873022

java 实现 pbkdf2_sha256加密验证算法相关推荐

  1. java提供密码加密的实现

    Md5加密 /*** 提供密码加密的类*/ public class Md5Util {public static String encode(String msg){try {MessageDige ...

  2. javascript rsa java,用javascript与java执行 RSA加密与解密

    用javascript与java执行 RSA加密与解密 2009-12-12 14:58:30   出处:https://www.yqdown.com 这几天一直做安全登录,网上查了好多资料,不尽如意 ...

  3. java python rsa加密_实现Java加密,Python解密的RSA非对称加密算法功能

    摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...

  4. java 接口 安全加密_Java中的安全加密

    java 接口 安全加密 上一次我写关于密码学的文章时 ,我概述了Apache Shiro加密API,并展示了如何使用其两个对称密码. 我还写道:"您不需要在应用程序中加密和解密敏感数据的更 ...

  5. php 3des 兼容java,java版3des加密程序,可与php兼容

    java版3des加密程序,可与php兼容 时间:2009-03-29 22:35来源:未知 作者:admin 点击:次 代码: import java.io.UnsupportedEncodingE ...

  6. java使用RSA加密方式,实现数字签名

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用RSA加密方式,实现数字签名.数字签名,使用私钥获取签名,使用公钥校验签名 测试代码 public static void main( ...

  7. java使用DES加密方式,实现对数据的加密解密

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用DES加密方式,实现对数据的加密解密.加密和解密中需要使用同一个秘钥 第一种方式,使用类型Key作为加密解密的共同秘钥. 测试代码 p ...

  8. java使用RSA加密方式实现数据加密解密

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用RSA加密方式实现数据加密解密,需要首先产生私钥和公钥 测试代码 public static void main(String arg ...

  9. Java实现MD5加密解密类

    Java实现MD5加密以及解密类,附带测试类,具体见代码. MD5加密解密类--MyMD5Util,代码如下: [java] view plaincopy package com.zyg.securi ...

最新文章

  1. 2021年广东省高考英语听说成绩查询,广东2021年高考准考证今起自行打印 成绩及分数线6月24日左右公布...
  2. 51nod 1268 和为K的组合 dfs
  3. 访百度奥运logo设计师李兴钢:虚实之间最美的呈现
  4. 使用Swashbuckle构建RESTful风格文档
  5. BZOJ2809-左偏树合并
  6. 随手小记·080911
  7. mysql判断可用性,MySQL -- 主從復制的可靠性與可用性
  8. python分类器鸢尾花怎么写_python机器学习基础教程:鸢尾花分类
  9. java键盘输入到文件中_在Linux中使用java和javac命令编译运行java文件
  10. Spark2.0.2+Zeppelin0.6.2 环境搭建 初探
  11. 面试题 01.01. 判定字符是否唯一 (计数排序思想)
  12. 内存、cache和寄存器之间的关系及区别
  13. 图表无法显示中文字,都是方框框?
  14. java浏览 下单界面_Javaweb网上商城项目实战(24)实现订单详情查询功能
  15. 1000m交叉网线最简单做法
  16. 小锤子要出来?老罗傲娇属性不再
  17. python大数据挖掘系列之淘宝商城数据预处理实战
  18. GoogleEarth二次开发平台指南(1) ---如何将谷歌地球嵌入到自定义的窗体中
  19. 06 体脂率案例优化
  20. android16进制编辑器,16进制编辑器app

热门文章

  1. filter 中用spring StopWatch 监控请求执行时间
  2. 使用 Scala 写WordContext程序
  3. 网站被写入恶意代码的主要原因及防范策略
  4. WinRT开发语言的功能和效率
  5. mysql基础命令大全
  6. 2011辞职日志:辞职最关键时刻在下周一
  7. Kenai.com 将与 java.net 合并
  8. PHP_SCREW 加密
  9. 使用oauth2.0自动获取用户信息
  10. ESP8266在线视频网址