将C#snippit转换为Java

将C#snippit转换为Java,c#,java,C#,Java,Java代码应该具有与C代码相同的功能。这个代码是一样的吗 这是C代码中的代码: 下面是Java移植的代码,但我得到了不同的输出: byte[] pwBytes = new String("password".toUpperCase().getBytes(), "UTF-16").getBytes(); MessageDigest md = null; md = MessageDigest.getInstance("SHA-1"); byte[] sha1pw = md.digest(pwBy

Java代码应该具有与C代码相同的功能。这个代码是一样的吗

这是C代码中的代码:

下面是Java移植的代码,但我得到了不同的输出:

byte[] pwBytes = new String("password".toUpperCase().getBytes(), "UTF-16").getBytes();

MessageDigest md = null;
md = MessageDigest.getInstance("SHA-1");
byte[] sha1pw = md.digest(pwBytes);

final BASE64Encoder encoder = new BASE64Encoder();
String encodedPw = encoder.encode(sha1pw);
Java代码计算encodedPw的方法应与C代码计算outputstr.Text的方法相同


很抱歉,我无法运行C代码来提供示例。Java代码将“密码”散列为默认情况下使用的
oghZbO1T3U/eu3polieqwez/gvQ=
Unicode编码,而Java中的
UTF-16
默认为大端。因此,在Java中,您需要:

byte[] pwBytes = "password".toUpperCase().getBytes("UTF-16LE");

你能告诉我们不同的输出吗?对不起,这个例子是密码,所以我不能提供它。我已经编辑了这个问题。那么你是说上面两段密码为“password”的代码会产生相同的正确输出吗?有人向我提供了C代码和最终的哈希。我在Java代码中使用了密码,但得到了不同的哈希值。Java代码将散列“密码”(无引号)为
oghZbO1T3U/eu3polieqwez/gvQ=
。。但我无法运行C#代码。请更新此问题,使其适用于internet上的其他用户。我们不帮助人们将“随机”代码片段从一种语言翻译成另一种语言。我们想要的问题是可搜索的,并且对其他有同样需求的人有用。这肯定会有所不同。我会尽快核实并接受这个答案。谢谢你…它很有效。我要指出,LE是必需的。另外,我两次调用getBytes的代码也是完全错误的。@jcalfee314还请注意,在原始代码中,您调用了使用计算机上默认字符集的
getBytes()
。使用UTF-16的部分仅用于创建字符串,而不是字节数组。
byte[] pwBytes = "password".toUpperCase().getBytes("UTF-16LE");