我在 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。我对他所做的事情的理解是:
所以,根据我上面的理解,我在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/