簡體   English   中英

C#到Ruby sha1 base64編碼

[英]C# to Ruby sha1 base64 encode

我正在嘗試在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="

當我在Ruby中嘗試相同的事情時,我得到一個不同的base64字符串用於相同的sha1哈希:

require 'digest/sha1'
require 'base64'
sha1 = Digest::SHA1.hexdigest('password')
# sha1 = 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
base64 = Base64.strict_encode64(sha1)
# base64 = "NWJhYTYxZTRjOWI5M2YzZjA2ODIyNTBiNmNmODMzMWI3ZWU2OGZkOA=="

我在調試器中驗證了C# passwordBytes字節數組與Ruby示例中的sha1值匹配。 有沒有一種特殊的方法我需要在Ruby中使用Base64來獲得C#代碼生成的相同字符串?

你是base64編碼字符串"5baa61..." ,而不是"\\x5b\\xaa\\x61..."

hexdigest更改為digest

sha1 = Digest::SHA1.digest('password')
base64 = Base64.strict_encode64(sha1)

你的C#和Ruby代碼做的事情略有不同。 在你的C#代碼中,passwordHash是一個字節[20]。 在您的Ruby代碼中,sha1包含一個40個字符的字符串。 所以你是Base64編碼兩個不同的東西。 因此結果不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM