Mar*_*man 5 c# ruby base64 encoding sha1
我正在尝试在Ruby中复制Convert.ToBase64String()行为.
这是我的C#代码:
var sha1 = new SHA1CryptoServiceProvider();
var passwordBytes = Encoding.UTF8.GetBytes("password");
var passwordHash = sha1.ComputeHash(passwordBytes);
return Convert.ToBase64String(passwordHash); // returns "W6ph5Mm5Pz8GgiULbPgzG37mj9g="
Run Code Online (Sandbox Code Playgroud)
当我在Ruby中尝试相同的事情时,我得到一个不同的base64字符串用于相同的sha1哈希:
require 'digest/sha1'
require 'base64'
sha1 = Digest::SHA1.hexdigest('password')
# sha1 = 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
base64 = Base64.strict_encode64(sha1)
# base64 = "NWJhYTYxZTRjOWI5M2YzZjA2ODIyNTBiNmNmODMzMWI3ZWU2OGZkOA=="
Run Code Online (Sandbox Code Playgroud)
我在调试器中验证了C#passwordBytes字节数组与sha1Ruby示例中的值匹配.有没有一种特殊的方法我需要在Ruby中使用Base64来获得C#代码生成的相同字符串?
你是字符串的base64编码"5baa61...",而不是"\x5b\xaa\x61..."
更改hexdigest到digest:
sha1 = Digest::SHA1.digest('password')
base64 = Base64.strict_encode64(sha1)
Run Code Online (Sandbox Code Playgroud)