我被要求为iPad开发公司的后台,在开发登录屏幕时,我遇到了身份验证过程的问题。
密码与salt连接,使用SHA-256进行哈希处理并存储在数据库中。后台是基于Flash的,使用as3crypto库进行哈希,然后使用密码+salt,我的问题是当前的实现使用Base64进行输入和输出。
这个网站展示了如何做到这一点:只需选择Hash,选择Base64作为输入和输出格式,然后开火。到目前为止,我所有的尝试都产生了与这个网站(和后台代码(给我的不同的结果
虽然我认为理论上应该相对简单:
- Base64编码pass+salt
- 使用SHA-256进行哈希
- 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();
后台代码不执行
- Base64编码pass+salt
- 使用SHA-256进行哈希
- Base64再次对结果进行编码
(正如你在上面所写的(
相反,它所做的是
- Base64将pass+salt字符串解码为字节数组
- 使用SHA-256对字节数组进行哈希
- Base64对字节数组进行编码,返回字符串
根据上面的步骤1,还不清楚编码输入字符串的字符是什么类型的。您需要确保两个系统对输入字符串使用相同的编码!UTF8、UTF16-LE或UTF16-BE在这种情况下会产生巨大的差异!
首先要找出在iOS端使用的正确字符编码。
哦,Matt Gallagher已经为iOS上使用的哈希编写了一个易于使用的包装类HashValue.m,我使用它取得了很好的效果。