0

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

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

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

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

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

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

有任何想法吗?提前欢呼和感谢

PS:顺便说一下,这是后台生成哈希密码的 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();
4

1 回答 1

1

后台代码不起作用

  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,我使用它取得了很好的效果。

于 2011-07-06T09:19:23.013 回答