c# - 将 C# 片段转换为 Java

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

对不起,我无法运行C#代码来提供示例。 Java 代码将“密码”散列为 oghZbO1T3U/eu3POLIIQweZ/gvQ=

最佳答案

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

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

关于c# - 将 C# 片段转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16847543/

相关文章:

c# - 如何从 Url 下载图像并将其保存到本地 SQLite 数据库

java - 为了在 Wicket 网页中正确调用 getString(String key) 函数,需要满足哪些要求?

java - 如何在java中附加生成的pdf文件邮件

java - 如何使用 javafx 绘制带有嵌套循环的 49 个矩形?

java - android/graphics/bitmapfactory 上的 NoClassDefFoundError

c# - 如何使用动态 url 在新选项卡中打开新窗口

c# - 使属性只能通过特定方法设置

c# - 创建任务时List Index Out of Range异常

c# - ASP.Net MVC 中的 LDAP 身份验证

java - 错误注入(inject) : org. apache.maven.plugin.war.WarMojo