如何传输AES加密密钥?

问题描述:

在我的黑莓手机上,我正在创建一个AES密钥并对数据进行加密。然后,我在发送到客户端之前使用RSA加密AES密钥c#.net如何传输AES加密密钥?

AES密钥是一个字节数组。我怎样才能将它转换成一个字符串,以便它可以通过RSA加密,然后在.net端解密?

我必须转换为字符串吗?

我通过JSON传输数据。我想我的问题是如何传递一个JSON数组?我将使用什么字符编码?

谢谢。

+2

见'Convert.ToBase64String'&'Convert.FromBase64String'功能。 http://en.wikipedia.org/wiki/Base64 – 2012-03-13 17:26:55

+2

RSA加密字节,而不是字符串。 – SLaks 2012-03-13 18:10:23

您可以使用以下内容,这是一个安全的URL,并且可以相对容易地进行视觉检查。这需要比Convert.ToBase64String更多的存储空间,但不应该是固定宽度加密密钥的问题。

string MyKey = BitConverter.ToString(MyAESKey); // dash removal is trivial here 

OR

string MyKey = Convert.ToBase64String(MyAESKey); 

代码示例

byte[] a = new byte[256/8]; 
Random random = new Random(); 
random.NextBytes(a); 

string base64 = Convert.ToBase64String(a); 
byte [] b = Convert.FromBase64String(base64); 

if (a.SequenceEqual(b)) 
    // true 


string c = BitConverter.ToString(a); 

string[] c1 = c.Split('-'); 
byte[] d = new byte[arr.Length]; 
for (int i = 0; i < arr.Length; i++) d[i] = Convert.ToByte(c1[i], 16); 

if (a.SequenceEqual(d)) 
    // true 
+0

嗯,试过了,谢谢。但我有一个问题。当我将我的256元素字节数组从Java转换为Base64时,它的长度超过256 ..(290或其他)。但是,当我将它转换回.NET时,它保持这种长度。这是为什么?谢谢。 – conor 2012-03-13 18:50:53

+0

好的,但是当我做一个base64解码不应该数据是相同的之前,它被编码?在我的情况下,它不是,解码数据字节数组比原来长: -/ – conor 2012-03-13 19:06:25

+0

@conor,那么你做错了什么。 – 2012-03-13 19:09:05