我在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的结果不同。我们使用相同的密钥。
例如:
如果输入为“123456”,则Xcode的输出为“Õÿ:> / o×NVÛ²¿+(A7“,php的输出是”| J??7b?a ???=?d ???“。(我不确定这些是否是确切的字符串或字符串本身包含一些无法显示的字符。)
有谁知道如何更改php代码以获得相同的结果?(您的解决方案是关于如何更改PHP代码将是完美的。因为我暂时无法更改Xcode。我的工作是写用于匹配Xcode结果的PHP代码。)
答案 0 :(得分:0)
你似乎在描述:
NSData *saltedData = [saltedPassword dataUsingEncoding:NSUTF8StringEncoding];
as'将string1编码为UTF-8,让我们调用编码字符串" string2"'和做:
$password=mb_convert_encoding($password, "UTF-8");
然而,该步骤是将字符串转换为字节数组,例如查看此问题的答案String to byte array in php,您似乎应该在此步骤中执行以下操作:
$bytes = unpack("H*",$password);