수줍음이 적은 사람들을 위해 약간의 코딩 작업을 수행하십시오.
약 10 년 전에 알고리즘을 발견하고 C # 에서 구현했습니다 (아래 참조)
Windows에서 실행하려면
나는 자유 스크립트를 powershell 스크립트로 변환했습니다.
$dpid = Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name "DigitalProductId"
# Get the range we are interested in
$id = $dpid.DigitalProductId[52..(52+14)]
# Character table
$chars = "BCDFGHJKMPQRTVWXY2346789"
# Variable for the final product key
$pkey = ""
# Calculate the product key
for ($i=0; $i -le 24; $i++) {
$c = 0
for($j=14; $j -ge 0; $j--) {
$c = ($c -shl 8) -bxor $id[$j]
$id[$j] = [Math]::Floor($c / 24) -band 255
$c = $c % 24
}
$pkey = $chars[$c] + $pkey
}
# Insert some dashes
for($i = 4; $i -gt 0; $i--) {
$pkey = $pkey.Insert($i * 5, "-")
}
$pkey
이것을 실행하면 제품 키를 얻습니다. (따라서 당신을 위해 코딩하지 마십시오)
원본 게시물
그래서 이것은 내가 파고 코멘트 한 실제 C # 코드입니다.
public static string ConvertDigitalProductID(string regPath, string searchKey = "DigitalProductID") {
// Open the sub key i.E.: "Software\Microsoft\Windows NT\CurrentVersion"
var regkey = Registry.LocalMachine.OpenSubKey(regPath, false);
// Retreive the value of "DigitalProductId"
var dpid = (byte[])regkey.GetValue(searchKey);
// Prepare an array for the relevant parts
var idpart = new byte[15];
// Copy the relevant parts of the array
Array.Copy(dpid, 52, idpart, 0, 15);
// Prepare the chars that will make up the key
var charStore = "BCDFGHJKMPQRTVWXY2346789";
// Prepare a string for the result
string productkey = "";
// We need 24 iterations (one for each character)
for(int i = 0; i < 25; i++) {
int c = 0;
// Go through each of the 15 bytes of our dpid
for(int j = 14; j >= 0; j--) {
// Shift the current byte to the left and xor in the next byte
c = (c << 8) ^ idpart[j];
// Leave the result of the division in the current position
idpart[j] = (byte)(c / 24);
// Take the rest of the division forward to the next round
c %= 24;
}
// After each round, add a character from the charStore to our key
productkey = charStore[c] + productkey;
}
// Insert the dashes
for(int i = 4; i > 0; i--) {
productkey = productkey.Insert(i * 5, "-");
}
return productkey;
}
Software\Microsoft\Windows NT\CurrentVersion
키로 전달해야 합니다.DigitalProductId
당시 MS Office Products는 동일한 알고리즘을 사용했기 때문에 관련 레지스트리 키를 제공하여 해당 제품 키도 계산할 수있었습니다.
물론 바이트 배열을 입력으로 사용하도록 함수를 리팩토링 할 수 있습니다.
오늘도. 방금 Windows 10 컴퓨터에서 테스트했지만 여전히 작동합니다.