首页 > 编程语言 >java 实现 PHP password_hash() password_verify() 单向验证

java 实现 PHP password_hash() password_verify() 单向验证

时间:2022-11-11 11:00:13浏览次数:75  
标签:10 PHP hash 2y toCharArray password BCrypt


近期一个 php 转 java 项目中遇到。写出来分享一下:

java BCrypt 类库。

​https://github.com/patrickfav/bcrypt​

@Test
public void testBCrypt() {
String password = "abcd";
String bcryptHashString = BCrypt.withDefaults().hashToString(12, password.toCharArray());
System.out.println(bcryptHashString);
// $2a$12$US00g/uMhoSBm.HiuieBjeMtoN69SN.GE25fCpldebzkryUyopws6
BCrypt.Result result = BCrypt.verifyer().verify(password.toCharArray(), bcryptHashString);
assert result.verified;
// String hash = BCrypt.with(customVersion2f).hashToString(10, password.toCharArray());
// String hash = BCrypt.with(BCrypt.Version.VERSION_2X).hashToString(10, password.toCharArray());
String hash = BCrypt.with(BCrypt.Version.VERSION_2Y).hashToString(10, password.toCharArray());
System.out.println(hash);
//from php
// hash = "$2y$10$SUr/RXt7IwSALE8x3W25huJDGDKWjBEisXIdS/As7CIqwLMgaUOE.";
// hash = "$2y$10$L.D2Q/d.7f0/vtJv7KzwXesxjlnAOkjmg/HjS4FXdWLJBE.tBZDSq";
hash = "$2y$10$gNNdf9tIKD3Sa.XOL/7zreGL9YQwk.d1iFYcOjMy3ab6EFKQ6P2yq";
//from php 'abCd'
// hash = "$2y$10$3i/2nXwBYFW353MhCDQJYusVhwlwZHiYKTSA9nm6GB6aiISsYzuXa";
BCrypt.Result res = BCrypt.verifyer().verify(password.toCharArray(), hash);
assert res.verified;
}

php hash 到 java 没有问题

java hash 到 php 需要重新定义一些函数,文档中提到:

For example the PHP implementation of bcrypt will return hashes with version $2y$. By using BCrypt.withDefaults() it will default to version $2a$. The older $2$ version is not supported. For advanced use cases you may add your own version by providing a version identifier and a custom message formatter as well as parser.

Version customVersion2f = new Version(new byte[]{0x32, 0x66} /* 2f */,true ,true, myCustomFormatter, myCustomParser);

 

 

 

 

 

标签:10,PHP,hash,2y,toCharArray,password,BCrypt
From: https://blog.51cto.com/u_2776699/5843273

相关文章

  • 数组还是HashSet?
    我记得大约在半年前,有个朋友问我一个问题,现在有一个选型:一个性能敏感场景,有一个集合,需要确定某一个元素在不在这个集合中,我是用数组直接Contains还是使用HashSet<T>.Cont......
  • 【Redis】散列表(Hash)和列表(List)的运用和理解以及Hash和List应用场景对比详解
    一.散列表(hash)Redis哈希是字符串类型字段和值的映射表。哈希特别适合存储对象。Redis中的每个哈希可以存储232-1个键值对(超过40亿)。1.1基本操作RedisHset命令......
  • 浅谈PHP设计模式的模板方法模式
    简介:模板方法模式,是行为型的设计模式。定义一个操作中的算法的骨架,而将一些步骤延迟到子类当中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。通......
  • 浅析WeakHashMap
    在Java或者是Android编程中,我们一般都会使用到Map,比如HashMap这样的具体实现。更高级一点,我们可能会使用WeakHashMap。WeakHashMap其实和HashMap大多数行为是一样的,只是Weak......
  • 浅谈PHP设计模式的原型模式
    简介:原型模式,属于创建型模式的一种。主要针对对象进行克隆,把被克隆的对象称之为原型,原型模式称之为克隆模式也许更为贴切。用原型实例指定创建对象的种类,并且通过拷贝这......
  • Redis数据结构简介-Hash
     Hash结构存储值与结构读写能力:包含键值对的无序散列表添加,获取,移除单个键值对;获取所有键值对.存储类似HashMap的数据 hash是日常开发过......
  • Redis 中 hash 扩容与缩容
    Redis中hash扩容与缩容当哈希表中元素数量逐渐增加时,此时产生hash冲突的概率逐渐增大,且由于dict也是采用拉链法解决hash冲突的,随着hash冲突概率上升,链表会越来越......
  • PHPcms分页实现多种效果
    2022-11-10phpcms修改分页实现多种效果"首页、上一页、页码数、下一页、末页、共X页、共X条"等,根据自己实际需要来进行更改。实现代码在776行左右1<?php......
  • PHPcms全站搜索查询模糊查询文章内容
    2022-11-10路径:phpcms/modules/search/index.php(具体内容根据自己详细代码进行针对修改)1<?php2defined('IN_PHPCMS')orexit('Nopermissionresources.')......
  • PHP curl获取页面内容,不直接输出到页面,CURLOPT_RETURNTRANSFER参数设置
    使用PHPcurl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出。这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true。1、curl获取页面......