我需要将字符串转换为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);
答案 0 :(得分:0)
只需使用:
byte[] bytes = Encoding.UTF8.GetBytes("SomeString");
但有一些注意事项:
为什么要关心字节是否已签名?
答案 1 :(得分:0)
如上所述,字节字节序的行为完全相同。签名与无签名在这里也不是真正的因素。
请使用:
byte[] bytes = Encoding.UTF8.GetBytes("my string");
你应该没事。
如果你解释为什么你需要除了这种情况之外的其他东西,我可能会进一步提供帮助。
答案 2 :(得分:-1)
自从我在异质环境中玩这段时间已经有一段时间了,但我不相信签名与未签名应该会产生巨大的差异。如果我是正确的,那么数组的排序就是一个大问题。
有两种解决方案(可能的解决方案?):
要么解决订购问题。