【问题标题】:SHA256 implementation using Base64 for input and output使用 Base64 进行输入和输出的 SHA256 实现
【发布时间】:2011-07-06 17:19:23
【问题描述】:

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

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

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

虽然我认为理论上应该比较简单:

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

到目前为止,我还无法做到这一点,老实说,我感到非常头疼。 我的代码正在变成一个活生生的迷宫,我估计明天我得重做。

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

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();

【问题讨论】:

标签: ios base64 sha256


【解决方案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,我使用它并取得了不错的效果。

【讨论】:

  • 首先感谢您的意见!抱歉耽搁了,老实说,工作中的优先级发生了变化,我不得不推迟这个实验,所以我还没有尝试过你的解决方案。但是,看起来您正在做一些事情。我稍后再试一次,但这是因果报应;)再次感谢
猜你喜欢
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 2023-03-26
  • 2011-08-21
相关资源
最近更新 更多