我有class
encrypts
和decrypts
字符串。它使用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[]
。我需要一个字节数组,其值是字符串中的值。这可能吗?如果您知道如何做,请提供快速示例。
谢谢, 〜在圣地亚哥
答案 0 :(得分:1)
我会使用System.Convert.ToBase64String和FromBase64String对base64中的字节进行编码。
修改:此计划更详细地说明了这一点
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("]");
}
}
答案 1 :(得分:1)
我认为C#中的这两种方法可能会对您有所帮助。我已经将这些用于我的加密例程,以便为我的IV和Key获取一个byte []。是否有可能在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();
}