计算VS_KEY容器名如何计算VS_KEY容器名?它们通常看起来像这样:VS_KEY_71E582524B5DDE29。我假设它是基于计算机名称的,但是如果我们运行的云服务会在每次实例重新启动时随机更改计算机名称怎么办?我们需要在实例启动时获得容器名称,以便我们知道将私钥存储到哪个容器中,因此构建工具和所有工具都应该可以工作。我们需要自动设置容器名称。所以基本上我们需要找到一种方法来在每次计算机重新启动时生成正确的容器名称。任何提示或帮助?当我们尝试在集成服务器上自动注册密钥时,我们逐步遇到了这个问题。必须运行VisualStudio或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内容的消息。varkey=newResolveKeySource();key.KeyFile=path_to_key_file;尝试{key.Execute();}catch(Exceptione){varmatch=Regex.Match(e.Message,"VS_KEY_[A-F0-9]+");如果(匹配成功){返回匹配值;}}方案二:获取生成这个hashcode的代码,用它直接取值,无一例外。这或多或少是DLL的摘录。publicstaticstringGetLocalUserKeyContainerByGeneration(stringkeyFile){stringlocalName=Environment.UserDomainName+"\"+Environment.UserName;文件流keyFileStream=null;尝试{keyFileStream=File.OpenRead(keyFile);intnum=(int)keyFileStream.Length;byte[]array=newbyte[num];keyFileStream.Read(array,0,num);ulonghash1=HashFromBlob(数组);byte[]bytes=Encoding.Unicode.GetBytes(localName.ToLower(CultureInfo.InvariantCulture));返回"VS_KEY_"+(hash1^HashFromBlob(bytes)).ToString("X016",CultureInfo.InvariantCulture);}finally{if(keyFileStream!=null){keyFileStream.Close();}}}privatestaticulongHashFromBlob(byte[]data){uintnum=17339221u;uintnum2=19619429u;uintnum3=10803503u;for(inti=0;i这个答案与@kdrapel一致,但我不能把它放在评论中。我不得不破解它以了解如何在内联任务中实际使用它,所以我想分享一下。以上就是《C#学习教程:计算VS_KEY容器名》的全部内容分享。如果对您有用,您需要进一步了解C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
