计算 VS_KEY 容器名称

2024-01-28

如何计算 VS_KEY 容器名称?它们通常是这样的:VS_KEY_71E582524B5DDE29。

我假设它是基于计算机名称的,但是如果我们运行的云服务在每次实例重新启动时随机更改计算机名称会怎样?

当实例启动时,我们需要知道容器名称,以便我们知道将私钥存储到哪个容器中,以便构建工具和所有工作正常进行。我们需要自动设置容器名称。

所以基本上我们需要找到一种方法来在每次计算机重新启动时生成正确的容器名称。有什么建议或帮助吗?


我们在尝试在集成服务器上自动注册密钥时遇到了这个问题。必须运行 Visual Studio 或 MSBuild 来提取 VS_KEY 是不可接受的。然后通过最详细地调查 MSBuild 日志,我发现了以下内容。

此密钥是通过 Microsoft.Build.Tasks.v4.0.dll(存在于 GAC 中)生成的。该 DLL 中有一个名为“ResolveKeySource”的类。通过使用 ILSpy 或 Reflector 查看代码,您将看到一个调用 ResolveAssemblyKey 的 Execute 方法。这个方法是 VS_KEY_xxxxxx 之谜的核心。

VS_KEY_xxxxx 值是通过将密钥内容与Environment.UserDomainName 和Environment.UserName 进行哈希运算而生成的。

第一个解决方案:您创建一个 ResolveKeySource 实例并调用适当的方法。由于您不提供密码和其他信息,它将引发一个异常,其消息包含强大的 VS_KEY 内容。

var key = new ResolveKeySource();
key.KeyFile = path_to_key_file;
try {
   key.Execute();
} catch (Exception e) {
  var match = Regex.Match(e.Message, "VS_KEY_[A-F0-9]+");
   if (match.Success) {
       return match.Value;
   }
}

第二种解决方案:获取生成此哈希码的代码并使用它直接获取值,没有异常。这或多或少是 DLL 的摘录。

    public static string GetLocalUserKeyContainerByGeneration(string keyFile) {

        string localName = Environment.UserDomainName + "\\" + Environment.UserName;

        FileStream keyFileStream = null;

        try {
            keyFileStream = File.OpenRead(keyFile);

            int num = (int)keyFileStream.Length;
            byte[] array = new byte[num];

            keyFileStream.Read(array, 0, num);

            ulong hash1 = HashFromBlob(array);
            byte[] bytes = Encoding.Unicode.GetBytes(localName.ToLower(CultureInfo.InvariantCulture));

            return "VS_KEY_" + (hash1 ^ HashFromBlob(bytes)).ToString("X016", CultureInfo.InvariantCulture);
        }
        finally {
            if (keyFileStream != null) {
                keyFileStream.Close();
            }
        }
    }

    private static ulong HashFromBlob(byte[] data) {

        uint num = 17339221u;
        uint num2 = 19619429u;
        uint num3 = 10803503u;

        for (int i = 0; i < data.Length; i++) {
            byte b = data[i];
            uint num4 = (uint)b ^ num3;
            num3 *= 10803503u;
            num += (num4 ^ num2) * 15816943u + 17368321u;
            num2 ^= ((num4 + num) * 14984549u ^ 11746499u);
        }

        ulong num5 = (ulong)num;
        num5 <<= 32;

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

计算 VS_KEY 容器名称 的相关文章

随机推荐

  • C# 将 datagridview 绑定到表单与控件中的数据表

    我有以下代码 DataGridView lGrid new DataGridView BindingSource bind new BindingSource DataTable Table new DataTable this Contr
  • 在C++中将派生类指针分配给基类指针

    我有以下 class base class derived public base public derived void myFunc cout lt lt My derived function lt lt std endl 我现在有
  • 在 Next.js 中设计持久布局

    我正在经历this https adamwathan me 2019 10 17 persistent layout patterns in nextjs 文章 我试图弄清楚在选项 4 中持久性应该如何发生 据我所知 您需要为每个页面重新定
  • System.Diagnostics.Debug 命名空间与其他日志记录解决方案(log4net、MS Enterprise Library 等)

    我目前正在研究 net 项目的各种日志记录可能性 但我无法在 System Diagnostics Debug Trace 功能和第三方库 如 log4net MS Enterprise Library NLog 等 之间做出决定 目前我已
  • 无法在 SQL Server 2008 中插入字符“≤”

    我有一个 SQL Server 2008 数据库和一个nvarchar 256 表的字段 疯狂的问题是当我运行这个查询时 update ruds values short text set value asjdklasd where rud
  • 的解释

    我刚刚偶然发现了一些我以前从未见过的东西 在里面Backbone js 示例 TODO 应用程序的来源 https github com jashkenas backbone blob master examples todos index
  • 将 [0,1] 区间扩展到 [a,b] 的正确方法是什么?

    许多随机数生成器返回 0 到 1 之间的浮点数 最好 正确的获取方式是什么integers之间a and b 将区间 0 1 划分为 B A 1 个 bin 示例 A 2 B 5 0 1 4 1 2 3 4 1 Maps to 2 3 4
  • matplotlib 标题中的 Latex 和文本

    我试图显示一个带有标题的图像 该标题将普通文本与几个 Latex 命令结合起来 plt imshow w1subtracted2 origin lower extent l max l max b max b max cmap color
  • 将 Unity 与 Eclipse 集成 - 通信?

    我通过以下步骤做到了 集成 Unity 和 Eclipse http forum unity3d com threads 71607 Integrating Unity and Eclipse 我可以使用 Android SDK 或 NDK
  • 带重定向的python请求

    正在尝试进行身份验证http 72 ru http 72 ru网站 注意到有一个重定向到https loginka ru auth https loginka ru auth 发现有 302 个带有数据形式的纯凭证的 POST 从 Chro
  • numpy.einsum 与 Fortran 或 C 相比是否高效?

    我写了一个 numpy 程序 非常耗时 经过profiling 我发现大部分时间都花在了numpy einsum 虽然numpy是LAPACK或BLAS的包装 但我不知道是否numpy einsum的性能与 LAPACK 或 BLAS 中的
  • 将 OS X Bash 脚本翻译为 Windows

    I use Hedge https hedge video 转移幻灯 https www magiclantern fm 在我的 Canon 5D Mark III 上拍摄的视频文件 在 OS X 上 我可以使用 Automator 设置
  • Xamarin iOS Javascript 和 C# 之间的通信

    我们正在实现一个应用程序 我们可以在 Javascript 和 C 之间进行通信 我们的 UIWebView 有一个按钮来调用一些本机功能 在 UIWebView 上 我在 ShouldStartLoad 上有一个处理程序 webView
  • Bake工具看不到SQLite3数据库中的表

    我正在尝试使用 CakePHP 2 1 1 使用 SQLite3 作为数据库构建一个简单的应用程序 为了节省时间 我尝试使用烘焙工具为下表创建模型 CREATE TABLE animals id integer primary key au
  • React - Internet Explorer 11 输入在第一次 onchange 后失去焦点

    我遇到了一个非常奇怪的问题 我无法理解 我目前正在使用 React 16 3 和 Antd 3 11 框架使用 create react app 并且我创建了一个表 该表在其标题列内呈现一个附加了 onChange 事件的组件 当我第一次关
  • “git pull”和“git fetch”有什么区别?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 两者有什么区别git pull https git scm com docs git pull and git fetch h
  • 詹金斯权限被拒绝

    我很抱歉来到这里询问这个问题 但我已经阅读了所有互联网试图找到解决方案 但我仍然遇到这个问题 我已经成功安装了 当我还有希望的时候就开始吧 jenkins 以便在我们的持续集成流程中使用它 我尝试从一个简单的例子开始 如下所示 pipeli
  • laravel 从带有实际点的文件夹名称加载视图

    我正在创建一个多域 Laravel 应用程序 因此我的视图文件位于每个域的单独文件夹中 例如 以下内容 return view pages SERVER SERVER NAME public home 应该加载一个视图 pages doma
  • Paypal自适应支付php

    我有这个问题 我已经按照这个教程 gt http www youtube com watch v rzRR1i F VA http www youtube com watch v rzRR1i F VA 设置完所有内容后 我在完成身份验证过
  • 计算 VS_KEY 容器名称

    如何计算 VS KEY 容器名称 它们通常是这样的 VS KEY 71E582524B5DDE29 我假设它是基于计算机名称的 但是如果我们运行的云服务在每次实例重新启动时随机更改计算机名称会怎样 当实例启动时 我们需要知道容器名称 以便我