php - Xcode和PHP中的SHA1具有不同的结果

标签 php ios hash encoding sha1

我在 php 中做一些工作尝试通过 SHA1 加密字符串。但是,我需要将结果与在 Xcode 中完成的其他人的结果相匹配。
他在 Xcode 中写的内容如下:

NSString *saltedPassword = [NSString stringWithFormat:@"%@%@",_myTextField.text,saltKey];
NSString *hashedPassword = nil;
unsigned char hashedPasswordData[CC_SHA1_DIGEST_LENGTH];
NSData *saltedData = [saltedPassword dataUsingEncoding:NSUTF8StringEncoding];
if (CC_SHA1([saltedData bytes], [saltedData length], hashedPasswordData)) {
    hashedPassword = [[NSString alloc] initWithBytes:hashedPasswordData length:sizeof(hashedPasswordData) encoding:NSASCIIStringEncoding];
} else {
    NSLog(@"ERROR: registerAction, should not be here");
    abort();
}

我不太了解 Xcode。我对他所做的事情的理解是:
  • 将字符串与键连接起来得到一个新的字符串,我们称之为“string1”。
  • 将 string1 编码为 UTF-8,我们将编码字符串称为“string2”
  • 使用SHA1加密string2,长度为20(CC_SHA1_DIGEST_LENGTH是20,对吧?),我们称加密后的字符串为“string3”
  • 将“string3”编码为 ASCII 以获得最终结果。

  • 所以,根据我上面的理解,我在php中编写了如下代码:
    $password.=$configs['key'];
    $password=mb_convert_encoding($password, "UTF-8");
    $codedPassword=sha1($password, $raw_output = TRUE);
    $codedPassword=mb_convert_encoding($codedPassword, "ASCII");
    echo($codedPassword);
    

    $password 是我要加密的字符串。
    但是我得到的结果与 Xcode 的结果不同。我们使用相同的 key 。

    例如:

    如果输入是“123456”,Xcode的输出是“Õÿ:>/
    o×NVÛ²¿+(A7", php 的输出是 "|J? ?7b?a?? ?=?d???"。(我不确定这些是确切的字符串还是字符串本身包含一些无法显示的字符。)

    有谁知道如何更改 php 代码以获得相同的结果?(如果您的解决方案是关于如何更改 PHP 代码,那将是完美的。因为我暂时无法更改 Xcode。我的工作是编写 PHP 代码以匹配 Xcode 的结果。)

    最佳答案

    你似乎在描述:

    NSData *saltedData = [saltedPassword dataUsingEncoding:NSUTF8StringEncoding];
    

    作为'将string1编码为UTF-8,我们将编码字符串称为“string2”'并执行:
    $password=mb_convert_encoding($password, "UTF-8");
    

    但是,该步骤是将字符串转换为字节数组,例如查看此问题的答案 String to byte array in php ,看来您应该在该步骤中执行以下操作:
    $bytes = unpack("H*",$password);
    

    关于php - Xcode和PHP中的SHA1具有不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31103322/

    相关文章:

    iphone - 蓝牙应用的最佳平台

    iphone - 在 IB 中编辑 UIScrollView 的最简单方法

    mysql - PHP MySQL,获取下一个 key

    javascript - 链接通过 Ajax 拉入的 2 个不同 php 文件的结果

    php - ExpressionEngine no_results 不工作

    md5 - 有什么方法可以区分 sha-1 的 md5 吗?

    ruby-on-rails - Ruby:通过点击访问值

    php - 登录脚本不起作用 - PHP

    objective-c - Application Delegate 是否是加载登录 View 的正确位置?

    javascript - 第一次这一行 console.log ("alphabet--->"+ alphabet);正在打印未定义