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

近期一个 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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值