You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework 4.8程序如何将DLL哈希算法从SHA-1改为SHA-256?

修改.NET Framework 4.8程序集的哈希算法从SHA-1到SHA-256

你遇到的问题核心在于:AssemblyDefinition.HashAlgorithm是程序集元数据中存储的固定属性,而非运行时动态创建的哈希算法实例,所以你之前尝试的重写HashAlgorithm.Create()、重新签名ClickOnce清单等操作无法直接修改这个字段。正确的做法是直接编辑程序集的元数据,具体步骤如下:

1. 使用Mono.Cecil修改程序集元数据

Mono.Cecil是专门用于操作.NET程序集元数据的工具,你可以通过它直接修改AssemblyDefinition.HashAlgorithm属性:

  • 首先安装Mono.Cecil NuGet包:

    # 使用.NET CLI
    dotnet add package Mono.Cecil
    # 或者Package Manager控制台
    Install-Package Mono.Cecil
    
  • 编写简单的修改工具代码:

    using Mono.Cecil;
    
    class AssemblyHashChanger
    {
        static void Main(string[] args)
        {
            // 替换为你的目标DLL路径
            string targetAssemblyPath = "YourApp.dll";
            // 加载程序集
            var assemblyDef = AssemblyDefinition.ReadAssembly(targetAssemblyPath);
            
            // 将哈希算法修改为SHA256
            assemblyDef.HashAlgorithm = AssemblyHashAlgorithm.SHA256;
            
            // 保存修改后的程序集(可指定新路径避免覆盖原文件)
            assemblyDef.Write("YourApp_Modified.dll");
        }
    }
    

2. 验证修改结果

  • 用ILSpy打开修改后的DLL,检查AssemblyDefinition.HashAlgorithm是否已变更为SHA256;
  • 或者使用ildasm.exe查看程序集元数据,确认哈希算法字段的取值。

3. 后续处理(如果需要)

  • 强签名程序集:如果原DLL是强签名的,修改后需要重新签名:
    sn -R YourApp_Modified.dll YourStrongNameKey.snk
    
  • ClickOnce应用:修改DLL后,需要重新生成ClickOnce清单,确保清单中DLL的哈希值与修改后的文件匹配,同时在项目属性中设置ClickOnce的哈希算法为SHA256。

内容的提问来源于stack exchange,提问作者Emilio Marino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:22:35