在 Java 和 C# 中计算 SHA-1 哈希值

2024-03-30

在 Java 和 C# 中计算 SHA-1 哈希值

我正在尝试在 C# 应用程序中复制 Java 应用程序的逻辑。其中一部分涉及生成密码的 SHA-1 哈希值。不幸的是我无法从 Java 和 C# 获得相同的结果。



C# Output  : 64  0a  b2 ba e0 7b  ed c4 c1 63  f6 79  a7 46  f7 ab 7f  b5 d1 fa
Java Output: 164 10a b2 ba e0 17b ed c4 c1 163 f6 179 a7 146 f7 ab 17f b5 d1 fa 
  

为了尝试弄清楚发生了什么,我一直在 Eclipse 和 Visual Studio 中使用调试器。



1. Check values of byte[] key:

    Java: { 84, 101, 115, 116 }
    C#  : { 84, 101, 115, 116 }

2. Check value of byte[] hash:

    Java: { 100 10 -78 -70 -32 123 ... }
    C#  : { 100 10  78 186 224 123 ... }
  

我已经阅读了有关该主题的其他帖子,其中大部分涉及输入字符串编码,但这些似乎对我没有帮助。我的猜测是,这与有符号字节和无符号字节有关,但我在这条路上没有取得太大进展。任何帮助将不胜感激。

Thanks,

Karle


Java版本:

public void testHash() {

    String password = "Test";

    byte[] key = password.getBytes();

    MessageDigest md = MessageDigest.getInstance("SHA-1");

    byte[] hash = md.digest(key);

    String result = "";
    for ( byte b : hash ) {
        result += Integer.toHexString(b + 256) + " ";
    }

    System.out.println(result);

}

C# 版本:

public void testHash() {

    String password = "Test";

    byte[] key = System.Text.Encoding.Default.GetBytes(password);

    SHA1 sha1 = SHA1Managed.Create();

    byte[] hash = sha1.ComputeHash(key);

    String result;
    foreach ( byte b in hash ) {
        result += Convert.ToInt32(b).ToString("x2") + " ";
    }

    Console.WriteLine(result);

}

在Java版本中,不要使用b + 256;相反,使用b & 255。 SHA-1 部分很好,这只是打印输出的问题。 Java 的“byte" 类型有符号:它返回-128到127之间的值。要得到相应的无符号值,必须加上256only if该值为负数。

与 255 的按位与(这就是“& 255" 确实)进行正确的转换,在二进制级别,将值截断为 8 个最低有效位。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 和 C# 中计算 SHA-1 哈希值 的相关文章

  • Java实现累加器类,提供Collector

    A Collector具有三种通用类型 public interface Collector
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • 使用 CoreBluetooth CBL2CAPChannel 移动数据

    我已经设置了一些数据传输功能 使用CoreBluetooth CBL2CAPChannel in a Swift iOS应用程序 这是发送数据的函数 func sendData outStream OutputStream gt Bool
  • Pyspark DF:如何添加文字空字典“{}”列

    我有 json 文件 其中每一行都是一个 json 对象 其中包含多个字符串和一个字典 str a blah str b blah dict obj 字典对象通常是 dict obj 偶尔包含值 并且很少会从所有 json 行中丢失 例如
  • ng-reflect-model 显示正确的值但未反映在输入中

    遇到一个非常奇怪的问题 我的应用程序在非常特定的用户案例中行为不当 我有一个门户 用户可以在其中添加问题和答案 然后进行编辑 在这种情况下 当我删除一个集合 q a 然后尝试添加它时 模型正在更新 但我的视图从占位符中获取值并自行更新 这里
  • 使用 opencv 调整视频大小并保存

    我正在尝试使用 opencv 重新调整视频大小 然后将其保存回我的系统 代码有效并且不会给出任何错误 但输出视频文件已损坏 我使用的 fourcc 是 mp4v 与 mp4 配合良好 但输出视频仍然损坏 需要帮忙 import numpy
  • 我可以阻止 Blazor 中的导航吗?

    在 Blazor 服务器端应用程序中 是否涉及一些执行实际导航的 javascript 例如当用户点击链接时 我的意思是像window history pushState 理论上是否可以覆盖该 javascript 以防止在某些情况下 当页
  • 当文本发生变化并满足一定条件时更改文本框的前景色

    当文本框中的文本发生变化并满足特定条件时 我需要设置文本颜色 我可以从代码后面实现这个文本框 文本已更改事件和设置笔刷颜色到所需的颜色 但我无法使用 xaml wpf 方法来实现这一点 我是 wpf 新手 我不确定当文本框中的文本更改时如何
  • 如何在 ASP.NET MVC 5 中实现自定义身份验证

    我正在开发 ASP NET MVC 5 应用程序 我有一个现有的数据库 我从中创建了 ADO NET 实体数据模型 我在该数据库中有一个表 其中包含 用户名 和 密码 列 我想使用它们在我的 Web 应用程序中实现身份验证和授权 由于客户的
  • 如何将对齐按钮添加到 Quill 的工具栏?

    我正在尝试将对齐按钮添加到 Quill 编辑器工具栏 工具栏文档 https quilljs com docs modules toolbar 不是很详细 它展示了如何选择对齐选项 但我想要一组并排的切换按钮 这可能吗 你可以做align
  • 在@SpringBootTest中测试@Async注释的方法

    我有一个服务 SomeService 它有一种方法来执行一些逻辑 Override public CompletableFuture
  • 使用 TFS 标签(例如 SourceSafe 标签)

    我们有一个相当标准的发布程序 使用 Visual Source Safe 在发布之前标记构建 这允许我们在出现任何问题时从该标签中获取数据 并在需要更改时使用它进行分支 我们有几个不同的项目 并且总是使用构建版本号进行标记 例如 V1 0
  • KnockoutJS JQuery 组合框绑定

    我想为淘汰赛制作一个绑定 它使用JQuery 自动完成组合框 http jqueryui com demos autocomplete combobox并允许 2 路绑定 http jsfiddle net rniemeyer PPsRC
  • Redux createStore() 已弃用 - 无法在 Redux 操作中从 getState() 获取状态

    So the createStore Redux 现已弃用 并且configureStore 推荐自 reduxjs 工具包 https redux toolkit js org 我很确定这与无法获得有关userInfo状态使用getSta
  • RxAndroid按钮点击观察者?

    各位程序员大家好 我使用 RxAndroid 在按下按钮时每 3 秒进行一次间隔 API 调用 private final CompositeDisposable disposables new CompositeDisposable Ob
  • Java 中的 XML 语法验证 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在试图弄清楚如何检查 XML 文件的语法 确保所有标签都已关闭 没有随机字符等 此时我关心的是确保文件中没有损坏的 XML文件 我一
  • 以编程方式删除标准 UITableView 中的栏

    有谁知道是否可以在代码中从 UITableView 中删除顶栏 那么在这种情况下 删除 书籍 栏吗 self navigationController setNavigationBarHidden YES
  • Powershell Get-ChildItem -Filter 的操作方式与具有相同值的Where 子句不同

    我的服务器上有一个名为 MyFolder 的文件夹 还有其他文件夹称为 MyFolder 1 MyFolder 2 MyFolder 3 等 如果我运行 gci C Sample Name like MyFolder 我得到预期的输出 Di
  • 可以在透明背景PNG图像上创建CSS阴影吗?

    有人知道是否可以在透明背景 PNG 图像上创建基于 css 的阴影 也许使用 CSS3 jquery 或者最后是服务器端 我想要实现的效果示例 非常确定是否可能它不会跨浏览器 但如果它性能良好 愿意应用吗 请随意添加您的意见 开放技术讨论
  • 在struts 2对话框中显示错误消息?

    我在 Struts 2 中有一个登录表单 其中包含用户名和密码字段 我想要的是当用户提交表单时 如果它不是有效用户 我想在对话框中显示错误消息 而不是在登录表单本身中显示错误消息 struts 2 中是否有可用的标签 或者有 人可以向我指出
  • Play Framework——向类路径添加新目录

    我希望能够有一个单独的目录 可以将代表插件的 jar 文件添加到 Play 2 0 项目中 Jar 文件通常保存在 Play 中的 lib 目录下 我想将我的 jar 放在一个名为 plugins 的目录中 这个问题之前被问过 但建议是只使
  • 在 Java 和 C# 中计算 SHA-1 哈希值

    在 Java 和 C 中计算 SHA 1 哈希值 我正在尝试在 C 应用程序中复制 Java 应用程序的逻辑 其中一部分涉及生成密码的 SHA 1 哈希值 不幸的是我无法从 Java 和 C 获得相同的结果 C Output 64 0a b