2013-06-23 150 views
2

我讀過一些關於這樣做的文章,我認爲這裏有一個我不考慮的變量。C#字節數組到字符串

我正在通過別人的代碼,他們已經實現了三重DES加密。他們沒有鑰匙,並將其存儲在某處作爲字符串。只作爲字節數組。

我需要在C#之外進行相同的加密/解密調用,所以我試圖找出使用的密鑰。

事情我已經嘗試:

byte[] key; // this is set 
byte[] iv; // this is set 

Convert.ToBase64String(key); 
Encoding.Default.GetString(key); 
Encoding.ASCII.GetString(key); 
Encoding.UTF8.GetString(key); 

也許從其中的一個結果是正確的,但我需要做的另一次轉換編碼呢?

萬一它很重要,我只是試圖通過ruby或node.js與openssl使用這些鍵。

爲了什麼是值得的,我也嘗試在ruby中創建一個字節數組,並對它們做一個包,但仍然看起來像錯誤的結果。

+0

簡單編碼不會進行加密或解密。 – Paparazzi

+0

我在這裏沒有加密或解密。只是試圖獲取密鑰的字符串 – JohnAgan

回答

0

您是否嘗試過使用字節數組的直接十六進制表示?

string keyHex = BitConverter.ToString(key).Replace("-", ""); 
string ivHex = BitConverter.ToString(iv).Replace("-", ""); 

(您可能還需要爲小寫的字符串和/或0x他們的前綴,這取決於其他系統是如何挑剔的。)

0

好吧,我也不得不重現.NET加密程序在Ruby代碼中。幾個小時後,我的頭撞牆,這是我的想法。忘掉Base64的,使用此代碼爲C#部分:

BitConverter.ToString(鍵).Replace( 「 - 」, 「」)

存儲結果。現在,在Ruby中定義此函數:

def self.hex_to_bin(s) 
    s.scan(/../).map { |x| x.hex.chr }.join 
end 

,並使用從C#部分輸出調用它,它會在六字符串轉換成二進制串。對我來說,這個決定因素就是在Ruby方面進行這種轉換。它適用於iv和key。