小编Nub*_*bie的帖子

你能用PHP获得相同的Java SHA-1吗?

我发现自己需要将网站平台从Java更改为PHP,但我想保留所有用户的密码......

在将哈希值作为网站密码写入之前,我有这段代码做密码哈希:

MessageDigest md = null;
md = MessageDigest.getInstance("SHA");
md.update(plaintext.getBytes("UTF-8"));
byte raw[] = md.digest();
hash = new Base64().encodeToString(raw).replaceAll("\n", "").replaceAll("\r", "");
Run Code Online (Sandbox Code Playgroud)

我认为Java代码对密码进行了SHA-1散列,但在此之前,它是字节编码为UTF-8,之后是Base64编码.

我想让一个PHP代码做同样的事情,即返回与Java相同密码的哈希值相同,只是看起来我做的SHA-1哈希的PHP代码不会返回相同的SHA (-1,而不是Base64编码,我认为?)与哈希的Java Base64解码值相比时的值...这可能与我的PHP中的密码首先不是UTF-8字节编码这一事实有关(我怎么能用PHP做到这一点?

PS

另一个奇怪的事情......我在Java中的密码长度都是28个字符(通常是这样的rnwn4zTNgH30l4pP8V05lRVGmF4=)......但是Base64().decode(hash)这些密码哈希的值是10个字符长(例如[B@14e1f2b).

我认为Base64为每3个章程做了额外的1个字符(28或27,不包括padding = charter,比那些10个字符大三分之一)所以我在做某些解码调用错误可能???

最重要的是,PHP中的SHA-1密码散列值是40个字符长(在UTF-8 mysql数据库中),如此dd94709528bb1c83d08f3088d4043f4742891f4f

php java passwords hash sha

4
推荐指数
1
解决办法
3691
查看次数

标签 统计

hash ×1

java ×1

passwords ×1

php ×1

sha ×1