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

时间:2011-07-05 18:24:39

标签: ios base64 sha256

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

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

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

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

  1. Base64编码pass + salt
  2. 使用SHA-256
  3. 哈希
  4. Base64再次对结果进行编码
  5. 到目前为止,我还没有能够做到这一点,说实话我真的很头疼。 我的代码正在成为一个活生生的迷宫,明天我将不得不重做它。

    有什么想法吗? 欢呼并提前致谢

    PS:这是Backoffice用于生成散列密码的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 个答案:

答案 0 :(得分:1)

后台代码没有

  1. Base64编码pass + salt
  2. 使用SHA-256
  3. 哈希
  4. Base64再次对结果进行编码
  5. (如上所述)

    相反,它的作用是

    1. Base64将pass + salt字符串解码为字节数组
    2. 使用SHA-256
    3. 散列字节数组
    4. Base64编码字节数组,返回一个字符串
    5. 根据上面的步骤1,不清楚输入字符串使用什么类型的字符编码。您需要确保两个系统对输入字符串使用相同的编码!在这种情况下,UTF8,UTF16-LE或UTF16-BE让世界变得与众不同!

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

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