我有此十六进制格式的私钥:
308204BC020100300D06092A864886F70D0101010500048204A6308204A20201000282010100B3B6F5AB13FCDECC12438581E90302E12BCF14570B49DCA2BF40957B79B10630DE20CB18B21D7393AC54FBA9D236F09235C4AF4D8E9227B163B8E14835A8FA04B5B8D0AD4D384CAF56FE269DDE40872129C90897D1BDC569CA8F18A7721B7C374B10DCE98921255B8BE21D42360BD8C8A1FE38E4E2E32E22CECE6A56A7B22FCC82B6D5C333A59B47C9330553731F812284EC8A3847192EC76BBC6A086E8D5347B8DCE352672E606BDCAAE6E99A401540DC370ED7D06AA33818E90EDE4A9AF74C4EBD30D1DD4F0F9E1D57C92F4BC80A9E21E1B510AA7DE6B6D3F541498D64D19A901BC2CB6B2C4C5DF6205E3B0E0FB9D6AB8EBADD74809CA8EC23C34AEC26AC6502030099B502820100189D6B16364E7985235987E216C6FEA91C479E09FF13C14CA91C239800DFE8A13A3C9E2B584A43CF15C40C92181ADA987900B2A125655787209EB8E705A37AB465697B7502EA76C630F3293D9EEF8116B7689B59A207A478F9940335FCAFE0B0E53BD82D1D8F24FC5E518CD380A56BD669DDC6BA2D4242C9BBAE4043658552E9798FEF4787407689BDC0CFDDF0D7CD770E702442CE8CE5EA8FE9E14E228EE277F6757BDA62379B4E50A373F6E6558A6D9B87C3888C19C0CC213739FA8F4FD2C67A2F52C 5710C4EEFAFF0C381B7531CF292A4763D1D38B2D5EB0B954358BAB8D9E9C207BF4C4B380A42D825E1E2B281ADD0978A4D125CC0F4E280B84A60D03D8D02818100D904EF9E99EEFA86B40B8BA53DA69D2E059E692A2FD47B13C83D31D8FFEE57ACF993DBF693D12575802179105915C32B7EADD3363FC2C9CF46832545EEBD3B1D7A76D0F504F0C7A250D31E8940E0F413946A53088A750B4743F9A910A6C565749CDC8629E3BA12C7492D59EFDC314B4EAA1DD4132FD174A3453689FCF737452D02818100D3FEAB5D8E9D68C4FCC49A11EAE2A17B9275DD574D9EC294CB6530591821CD9C125D240B613CD43D220E14062DB719907CB6F562C1DE312C956EBCEF143610B3AB526B4904AC0B46A7255AD63DDB2FB1F2555A17E9195138AA7575CB92BF08A3B14E59BBD3C87FFEB0BA6C298218F710EBC147D6E7A2D5B71C519B7F929D77190281803B6798FC0D14B85E4469398232BD222EEDDB9483B7CCE5630C32A8D4629A92E1F100A4FCDE252DD097070FA6A751CA22A4D6CB9AF92AB3A8ECC957D4BB50DC25C4BA8B3957C375D663EF3B74B3912BAB6C177BAAE119A4A782856450E78FF6CFBDECD2B7CB54C7074FB09209A927DFE8E2098B4F4BA307631672231DF98AD851028180298437FDF56371B397AD20D20EC5635B698CA66CD4863C43EA216D466CE5ED87EA17DFE1630BAC002EF 7782629D55EEC9D461F6339E18DFAB45815EEC37DC64F8B04A1BEE6E28A3F0C067194F570D49F90FCD39C2C0C8B3EA4B5BF229A9D3CA4485DBD666BE318C2A8E787614415C099C4D036F05569C6C4D0C0293D36FA194D028180743B3A761A06BF2DFF3C065366A73707787909B261183AB20F0322BC2A76363E1DED705D4FE38D9E211022D252132A513D5C3417F4EC6BA12B4AC3A48CC28E823CAF0CC3A1784C73002323A91D121E25B09236447221DE23C32CA5C60A37CDCBCD7EB1093CF792662ADDA61B19AB51F5E9B5529D820811B0D32B5CBBB458C89A
我想将其转换为der和pem并用它签名文件,以便另一端可以使用其公钥验证签名。
我正在尝试使用openssl和xxd在bash脚本中执行此操作,并且我正在考虑尝试使用python进行操作,但是现在我无法使其正常工作。
如果有人有任何想法,我很乐意听到。
编辑:
例如,我可以使用https://holtstrom.com/michael/tools/hextopem.php在线转换器将十六进制转换为pem,并使用----- BEGIN / END RSA PRIVATE KEY -----页眉/页脚,如果要保存,将其保存在private_key.pem文件中我检查了它们匹配的私钥和匹配的公钥的模数,但是我无法在任何地方加载该密钥以将其用于签名OpenSSL,也不会加载该密钥,因此我想我丢失了一些东西。
答案 0 :(得分:0)
使用您的十六进制输入文件(rsa-key-hex.txt),您可以执行以下操作-
将其转换为二进制文件(实际上是DER格式)-
xxd -r -ps rsa-key-hex.txt rsa-key.der
打印DER私钥-
openssl pkey -in rsa-key.der -inform der -noout -text
将其转换为PEM-
openssl pkey -in rsa-key.der -inform der -out rsa-key.pem -outform pem
使用私钥签署一些输入-
echo "Some Input" | openssl dgst -sha256 -sign rsa-key.pem > signature.dat
提取公钥-
openssl pkey -in rsa-key.pem -pubout -out rsa-key-pub.pem
使用公钥检查签名-
echo "Some Input" | openssl dgst -sha256 -verify rsa-key-pub.pem -signature signature.dat
或者,直接使用私钥检查签名-
echo "Some Input" | openssl dgst -sha256 -prverify rsa-key.pem -signature signature.dat
答案 1 :(得分:-1)
简单来说:
DER 实际上是二进制格式的数字证书数据。
PEM 是该二进制数据的 base64 编码形式。
现在,假设您的 HEX 数据是 PEM 格式的 ASCII 转换(即您的 PEM 实际上是 base64 编码的),您可以转换为 PEM(micro-python):
import binascii
binascii.unhexlify(hex_data)
将 HEX 数据转换为 DER 格式:
binascii.a2b_base64(binascii.unhexlify(hex_data))
您可以使用其他语言的相应库。