将C#snippit转换为Java

时间:2013-05-30 23:32:19

标签: c# java

Java代码应具有与C#代码相同的功能。这段代码是一样的吗?

这是C#代码中的代码:

byte[] hashBytes;
UnicodeEncoding encoding = new UnicodeEncoding();
hashBytes = encoding.GetBytes(inputstr.Text.ToUpper().Trim());

SHA1 sha1 = new SHA1CryptoServiceProvider();

byte[] cryptPassword = sha1.ComputeHash(hashBytes);
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
SHA1.Text = enc.GetString(cryptPassword);
outputstr.Text = Convert.ToBase64String(cryptPassword);

这是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代码应该以与C#代码计算outputstr.Text相同的方式计算encodedPw。

对不起,我无法运行C#代码来提供示例。 Java代码哈希"密码"为oghZbO1T3U/eu3POLIIQweZ/gvQ=

1 个答案:

答案 0 :(得分:1)

默认情况下,

UnicodeEncoding使用UTF-16 little endian in c#,而java中的UTF-16默认使用大端。所以在Java中你需要:

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