字符串到byte [] - c#就像java一样

时间:2011-10-05 16:00:46

标签: c# java string bytearray

  

可能重复:
  .NET String to byte Array C#

我需要将字符串转换为byte []。如果是这样,任务就会变得简单。我需要用C#编写它,但我需要它像Java一样。

我看到了两个问题:

Endianness:Java将内部存储为Big Endian,而默认情况下.NET为Little Endian。

签名:C#字节是无符号的。 Java字节已签名。

如何获取UTF-8字符串,并获得与Java相匹配的byte []。

为了提供更多上下文,我有这两个函数(一个在java中,一个在c#中),它们创建不同的哈希值,我怀疑它是由于.net vs java中字节表示的差异。 爪哇:

String key = "test";
String data = "test";
String algorithm = "HmacSHA1";
Charset charset = Charset.forName("utf-8");
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), algorithm);
Mac mac = Mac.getInstance(algorithm);
mac.init(signingKey);
return new String(Base64.encodeBase64(mac.doFinal(data.getBytes(charset))), charset);

C#:

string key = "ed2ee2e0-65c1-11de-8a39-0800200c9a66";
string data = "test";
byte[] aKey = Encoding.UTF8.GetBytes(key);
byte[] aData = Encoding.UTF8.GetBytes(data);
HMACSHA1 oEncode = new HMACSHA1(aKey);
byte[] aBytes = oEncode.ComputeHash(aData);
return Convert.ToBase64String(aBytes);

3 个答案:

答案 0 :(得分:0)

只需使用:

byte[] bytes = Encoding.UTF8.GetBytes("SomeString");

但有一些注意事项:

  1. .NET中没有“UTF-8”字符串:所有字符串都是 Unicode(UCS-2)。
  2. 没有大端/小端字节顺序 在UTF-8中,字节的顺序由格式定义。校验 RFC-2279了解详情。
  3. 为什么要关心字节是否已签名?

答案 1 :(得分:0)

如上所述,字节字节序的行为完全相同。签名与无签名在这里也不是真正的因素。

请使用:

byte[] bytes = Encoding.UTF8.GetBytes("my string");

你应该没事。

如果你解释为什么你需要除了这种情况之外的其他东西,我可能会进一步提供帮助。

答案 2 :(得分:-1)

自从我在异质环境中玩这段时间已经有一段时间了,但我不相信签名与未签名应该会产生巨大的差异。如果我是正确的,那么数组的排序就是一个大问题。

有两种解决方案(可能的解决方案?):

  1. 使用Array.Reverse()
  2. 在.NET中翻转数组
  3. use little endian in Java
  4. 要么解决订购问题。

相关问题