C#sha256转换为PHP

C#sha256转换为PHP,c#,php,ascii,sha256,C#,Php,Ascii,Sha256,我有一个由另一家公司创建的哈希表和盐表。散列是在C#中完成的,散列方法是sha256。这背后的逻辑是sha256(密码+盐) 输入示例: password = 'rosnicka' salt = 'zxwqTy+XjaY=' hash = '3jdt1+JL3MPmjYr2OoXdoUwNfuweuDCZa8/3g7SfsNg=' 当我尝试在PHP中运行哈希函数时 这个的输出是 “1125ed47a7aa11bc1c54c841b5eb7a6e72aa8ad27e010e6e

我有一个由另一家公司创建的哈希表和盐表。散列是在C#中完成的,散列方法是sha256。这背后的逻辑是sha256(密码+盐)

输入示例:

password = 'rosnicka'
salt     = 'zxwqTy+XjaY=' 
hash     = '3jdt1+JL3MPmjYr2OoXdoUwNfuweuDCZa8/3g7SfsNg='
当我尝试在PHP中运行哈希函数时

这个的输出是
“1125ed47a7aa11bc1c54c841b5eb7a6e72aa8ad27e010e6e25baa5b2a86cffb3”

我只使用散列计算器得到相同的结果

我联系了他们,想知道我做错了什么。他们告诉我,他们正在数据库中存储ASCII版本的散列。为了在PHP中获得相同的散列,我应该做些什么,或者为了将它们的散列转换为原始的sha256散列,我应该做些什么

非常感谢

正如alex K所说:

base64_encode(hash('sha256', 'rosnicka'.base64_decode('zxwqTy+XjaY='), true));

将完成这个技巧

C#散列已被Base64编码(salt也是如此,因此它可能在应用之前被Base64解码),在php中,字节有一个十六进制表示。Base64对PHP哈希结果进行编码,如果它与Base64不匹配,则对salt进行解码,追加字节并对结果进行Base64编码。@AlexK。是的,但不需要更多吗?Base64提供的输出比输入大,而在上面的示例中,预期的哈希值只有44个字符,而sha256哈希值只有64个字符。不,44个字符是合理的,Base64将更小,它的64个字符,因为2个字符用于直观地表示该字符串中的每个字节,哈希长度是它的一半。我将尝试一下!谢谢但是他们字面上说他们使用的是ASCII,而不是更短的base64,这意味着他们不使用base64与Unicode等价物相反。man!我爱你:)我试着逐行复制C代码,但失败了。为什么我不需要将所有内容转换为字节数组?@adambednar“true”参数将让hash()输出字节。您不必将所有内容都转换为字节,只需确保连接相同类型的变量(密码是纯字符串,而salt是base64编码的)。如果您需要帮助@AdamBednár,请将答案标记为选中