[英]Obtain .NET PublicKeyToken from snk file?
如何從 snk 文件中獲取 PublicKeyToken? 使用命令行工具。 我想過使用sn.exe,但是,找不到合適的參數。
如果要使用sn.exe
工具:
sn -p yourkey.snk publickey.snk
現在有只有公鑰的 publickey.snk
sn -tp publickey.snk
現在您擁有公鑰和公鑰令牌。
給定一個包含 snk 文件的byte[]
,例如
byte[] snk = File.ReadAllBytes("YourSnkFile.snk");
用
byte[] publicKey = GetPublicKey(snk);
byte[] publicKeyToken = GetPublicKeyToken(publicKey);
使用這些實用方法
public static byte[] GetPublicKey(byte[] snk)
{
var snkp = new StrongNameKeyPair(snk);
byte[] publicKey = snkp.PublicKey;
return publicKey;
}
public static byte[] GetPublicKeyToken(byte[] publicKey)
{
using (var csp = new SHA1CryptoServiceProvider())
{
byte[] hash = csp.ComputeHash(publicKey);
byte[] token = new byte[8];
for (int i = 0; i < 8; i++)
{
token[i] = hash[hash.Length - i - 1];
}
return token;
}
}
使用sn.exe從 .snk 文件中提取公鑰令牌需要兩個步驟。
使用 sn.exe 從YourFile.snk
提取公鑰並將其寫入Token.snk
sn -p YourFile.snk Token.snk
使用 sn.exe 從Token.snk
提取 Public Key Token 並寫入PublicToken.txt
sn -t Token.snk > PublicToken.txt
除了@xanatos 的回答,如果有人需要 PowerShell 版本:
function Get-SnkPublicKey([string]$FilePath)
{
$bytes = [System.IO.File]::ReadAllBytes($FilePath)
$pair = New-Object System.Reflection.StrongNameKeyPair -ArgumentList @(,$bytes)
$publicKey = $pair.PublicKey
#[System.Convert]::ToBase64String($publicKey)
$hexes = [System.BitConverter]::ToString($publicKey);
$hexes.Replace("-", "")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.