2009-10-02 29 views
1

我有一個classencryptsdecrypts一個字符串。它使用rijndael。無論如何,我試圖在客戶端上存儲加密的值。這一切都很好,很棒。我的問題是當我想解密值時,我需要用於加密字符串的Key and IV(InitVector)。它們是byte[]的值。我目前通過javascript變量將這些輸出到客戶端。當我打電話給服務時,我需要它們,因爲這個應用程序與大型機通信,並且需要用戶憑證。他們輸出到客戶端中的如何將客戶端上的數組轉換爲服務器上的字節[]?

var vector = [143,147,31,70,195,72,228,190,152,222,65,240,152,183,0,161];

形式,我能說的值傳遞給我的service爲字符串。我的問題是,在我的服務範圍內,如何將此string轉換回byte array?我曾嘗試

Encoding.ASCII.GetBytes("[143,147,31,70,195,72,228,190,152,222,65,240,152,183,0,161]");

但是,這不是我想要的。這試圖從該字符串值中創建一個新的Byte[]。我需要一個字符數組,其值是在字符串內部。這可能嗎?如果你知道如何做到這一點,請提供一個快速樣本。在聖地亞哥

回答

1

感謝, 〜CK我會編碼字節用base64,使用System.Convert.ToBase64String和FromBase64String。

編輯:這個方案更詳細地說明了這一點

class A{ 
     public static void Main() 
     { 
     byte[] a = new byte[]{143,147,31,70,195,72,228,190,152,222,65,240,152,183,0,161}; 
     string s = System.Convert.ToBase64String(a); 
     System.Console.WriteLine(s); 
     byte[] b = System.Convert.FromBase64String(s); 
     System.Console.Write("["); 
     foreach (var n in b) 
      System.Console.Write(n+","); 
     System.Console.WriteLine("]"); 
     } 
} 
+0

這件作品很棒馬丁。現在,當我解密的時候,它會粘住空字節。我只是做一個.replace(「\ 0」,string.Empty),它似乎是好的。有沒有更優雅的方式?謝謝大家! – Hcabnettek 2009-10-02 23:26:12

+0

我看不到你從哪裏得到一個空字節(我也不明白你的意思是「解密」 - 在我看到的任何地方都沒有稱爲「解密」的操作)。看我的編輯;在這個程序中,結果與輸入完全相同。 – 2009-10-03 07:44:46

1

我想在C#中這兩種方法可以幫助你。我已經將這些與我的加密程序一起使用,以便爲我的IV和Key獲得一個字節[]。是否可以輸出從Javascript中的GetString方法返回的字符串,然後使用該值來調用該服務?

private static byte[] GetArray(string input) 
    { 
     List<byte> bytes = new List<byte>(); 

     for (int i = 0; i < input.Length; i += 2) 
     { 
      string hex = input.Substring(i, 2); 
      bytes.Add(Convert.ToByte(Convert.ToUInt32(hex, 16))); 
     } 

     return bytes.ToArray(); 
    } 

    private static string GetString(byte[] input) 
    { 
     StringBuilder buffer = new StringBuilder(input.Length); 
     foreach (byte b in input) 
     { 
      buffer.Append(b.ToString("x2")); 
     } 
     return buffer.ToString(); 
    } 
+0

我正在發佈一些基本相同的東西。 +1 – 2009-10-02 22:56:29

相關問題