使用 RSA 加密雜湊
我必須加密一個雜湊,例如:
2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2
mykey.key
通過使用已經提供給我的公鑰(例如:)來使用 RSA 算法。我該怎麼做。我看到網站告訴我使用openssl
,但我不知道該怎麼做。編輯:我試過這樣做
我創建了一個文件並通過這樣做將雜湊推入其中
echo "2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2" >file.txt
然後是這個
openssl rsautl -inkey mykey.key -pubin -encrypt -in file.txt > file.txt.enc
當我試圖在記事本上打開 file.txt.enc 時,我得到了這個:
不確定這是否是成功的加密,因為我需要二進制格式的密文結果。
嘗試:
$ cat file.txt | openssl rsautl -encrypt -pubin -inkey mykey.key > secret.txt cat secret.txt }[4�Or)f���r�_ # more binary data here...
進而:
$ cat secret.txt | openssl rsautl -decrypt -inkey myprivatekey.key 2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2
兩個密鑰都應為 PEM 格式。
不確定這是否是成功的加密,因為我需要二進制格式的密文結果。
好吧,如果您真的想測試加密是否成功,請嘗試立即解密它,看看您是否可以取回您的明文。如果你得到你的明文,你很好。
我認為您對“二進制格式”的實際含義感到困惑。
這:
2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2
實際上是文本十六進制格式 - 二進制值的文本表示。
系統上的任何文件或數據塊最終都是一系列字節- 一個字節(為了簡單起見,不要擔心位)只是一個範圍從 0 到 255 的數字。您可以編寫或顯示字節作為十進制數、十六進制數、二進制數或應用程序處理字節所需的任何內容。
有多種方案可以將文本表示為數字、UTF-8、Unicode 等。
為了說明,文本字元串“2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2”轉換為字節後如下所示(以十進制顯示):
50 99 49 52 48 48 102 54 57 56 54 55 53 55 49 97 98 52 101 54 48 100 51 98 56 102 48 49 101 48 98 49 55 99 55 98 101 56 57 101 51 50 49 102 57 49 102 56 97 48 55 99 100 51 57 101 101 98 97 50 48 50 101 50
加上換行符。總共 65 個字節,如果您的語言環境使用 16 位字元,例如 Unicode,則為 130 個。Unicode 將與上面的值相同,但每個值前面都有一個 0。顯然,它不等於文本所代表的值。
因此,上述字節系列是您告訴
openssl
實際加密的內容,而不是實際值“2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2”(這將是一個非常長的十進制數)。因此,根據上述情況,您
file.txt.enc
可能包含 65 或 130 個隨機值。這就是記事本試圖呈現的內容。現在,如果你想要你的內容的文本十六進製表示- 我認為這會起作用(基於this):
file.txt.enc
xxd -p file | tr -d '\n'