SHA256实现,使用Base64进行输入和输出



我被要求为iPad开发公司的后台,在开发登录屏幕时,我遇到了身份验证过程的问题。

密码与salt连接,使用SHA-256进行哈希处理并存储在数据库中。后台是基于Flash的,使用as3crypto库进行哈希,然后使用密码+salt,我的问题是当前的实现使用Base64进行输入和输出。

这个网站展示了如何做到这一点:只需选择Hash,选择Base64作为输入和输出格式,然后开火。到目前为止,我所有的尝试都产生了与这个网站(和后台代码(给我的不同的结果

虽然我认为理论上应该相对简单:

  1. Base64编码pass+salt
  2. 使用SHA-256进行哈希
  3. Base64再次对结果进行编码

到目前为止,我还没能做到这一点,老实说,我很头疼。我的代码正在变成一个活生生的迷宫,我想明天我必须重做它。

有什么想法吗?提前干杯和感谢

附言:这是后台生成散列密码的Flash代码:

var currentResult:ByteArray;
var hash:IHash = Crypto.getHash('sha256');
var data:ByteArray = Base64.decodeToByteArray(str + vatel);
currentResult = hash.hash(data);
return Base64.encodeByteArray(currentResult).toString();

后台代码不执行

  1. Base64编码pass+salt
  2. 使用SHA-256进行哈希
  3. Base64再次对结果进行编码

(正如你在上面所写的(

相反,它所做的是

  1. Base64将pass+salt字符串解码为字节数组
  2. 使用SHA-256对字节数组进行哈希
  3. Base64对字节数组进行编码,返回字符串

根据上面的步骤1,还不清楚编码输入字符串的字符是什么类型的。您需要确保两个系统对输入字符串使用相同的编码!UTF8、UTF16-LE或UTF16-BE在这种情况下会产生巨大的差异!

首先要找出在iOS端使用的正确字符编码。

哦,Matt Gallagher已经为iOS上使用的哈希编写了一个易于使用的包装类HashValue.m,我使用它取得了很好的效果。

最新更新