广州双城热恋创意文化传播有限公司

现在的位置: 主页 > 企业简介 > 文章列表

文章正文

OpenSSL和Python实现RSA Key数字签名和验证

作者:广州双城热恋创意文化传播有限公司 来源:www.999loveyou.com 发布时间:2017-09-06 13:28:56
OpenSSL和Python实现RSA Key数字签名和验证

OpenSSL和Python实现RSA Key数字签名和验证,基于非对称算法的RSA Key主要有两个用途,数字签名和验证(私钥签名,公钥验证),以及非对称加解密(公钥加密,私钥解密)。本文提供一个基于OpenSSL命令行和Python的数字签名和验证过程的例子,另外会另起一篇使用OpenSSL和Python进行非对称加解密的例子。

1. OpenSSL实现数字签名和验证 1.1 生成私钥

生成2048 bit的PEM格式的RSA Key:Key.pem

# 生成私钥文件Key.pem $ openssl genrsa -out Key.pem -f4 2048 Generating RSA private key, 2048 bit long modulus .+++ ...................................................................+++ e is 65537 (0x10001) # 查看私钥文件内容 $ cat Key.pem -----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAoZZKNO89UcDkEgdulOtAK0d9dQ0xfnpt4QNUg16ISeNuAFYv OeXn/ToGounX67+bkYpH92dXCnNpOsERLogenWQT533tsRU9KByeCz+PRgjc5cBn wAA6z+F7JFUkY3GAaZDe7dmSIES/FH+9YKjRSe7+h2sF7va3tGPn8cLpDUoLLk2e ugWvmuWgEpCE6Wyed7UV3Vzdf2R+9oya9jkAoHI14hrz3xDssg0wlHqbptwsmwAQ 1ZBDSB1MpqaLCaUvV8NvtSBLDsZlzwkOj7bPiFZJRFIqRRg0UNWkUBR+BJhWZ7Zc Dud2kJcH0mX8/rfthfFa5Oy38Iz8UQOW0uZRlQIDAQABAoIBABTN+uPx4Z1DDppb pps55tsrqzWE61hzfu43tYvsgfOxeppEfnQf68yoye3z2b8avnbwrO9nuMc5sNTF wuaQ1BBDsGRfzFi+eU9Oz/J2zoWf4oEaUsFfxjK5v1cgNz0ugfAVnP5Wwv+wmkGT aNinI7s3MEJTP0JTNbfeHSD9jXAOYhXH1M6/gq+TxLlsFISbQgmIbnDkDU/biXC+ b4r4/3xBieaeYOSV5s7pziXcxPmZCrWdcggtcxxJeDFtvQbSU4PXM7n7NgcsGQiX kwlHF3TiSQpQRuthV1ioW4FFFtwKw38mwzYcexem5Pyv353xSfb4vGg2+mcUEaf9 oNYYasECgYEA0tpP8th2L1zVT4eyumE5KE95iH4Nr6RWkQpfWQ84MDmiK7cNFeBL 0l4kwUo4oQeNEfDHYlxZ/guaflDLOKJ7DampMEuc+Dl8hmwXhdhqeQzxNRnaoDV1 iIyyHUs9c/9ormjTsycas2VfH1sPm3SrwH2rQe4ttkVBS8mcouNlg3kCgYEAxC+G qgsN+IifgVoeHIw2ak0MxTdt0LfGWcygx4hzXCpYrnqns080Z4vGDxClhqfdM9OJ 0Y6GkaNIHay/4bUIsBYFoV78vV80oQykHs6nwdJqLZJeQohBUlO2LlGzatPtWWuc v3N9W/OjSd3q6UgApmFT4+cMmEUZjB7QsHhau/0CgYBRotDdd02a3NiB6Eocu1PD 9bFaVWO7I2eY1GlCNBBPK6FMR507YRI6KtUUOUZfomrODWlE/fih0aBJU8K69L2r 9opY9o2Z1bgO237oBXiD0az6ID5zVP9ilQbJLL5oUPUYweFlNbiyyIbhvwH18GAn MQDDkBIGxh2X2EFbF6vQEQKBgHW5Bxe2dnWylfQqvXLn+CclgQo+zpi2DkIIdloF WSPvDTP1yffhCVMxHnIfzRPWWvgkccjbu4hc8INOC/5GgaYYMNy6gPKp1IznZvxN iYDW4HvkHsfRt1DNhr6YrA7oiL5lwrNne8vXkR5cGgBOAoXUVWCmXnpozIG2ZAfg 0KGJAoGANO46bePCNaVlP37hW3vjraW4gzKPS0xscG7pLnLrv+T628PnFS7j7D7a 6v6BBBSgBTFnuEOk2F4bfIRvE04m2S9vzg6Mt2aJHn6RQjQVZPZF+qFvrXxjzqRU 4R+06Hk2Zm2D3x/XJTu2QmzT1kqp6AtsnfOCz3M0a1oyd5eCVdk= -----END RSA PRIVATE KEY----- 1.2 导出公钥

从私钥导出公钥:Key_pub.pem

# 从私钥导出公钥,很简单,使用参数-pubout就可以 $ openssl rsa -in Key.pem -pubout -out Key_pub.pem writing RSA key # 查看公钥文件内容 $ cat Key_pub.pem -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoZZKNO89UcDkEgdulOtA K0d9dQ0xfnpt4QNUg16ISeNuAFYvOeXn/ToGounX67+bkYpH92dXCnNpOsERLoge nWQT533tsRU9KByeCz+PRgjc5cBnwAA6z+F7JFUkY3GAaZDe7dmSIES/FH+9YKjR Se7+h2sF7va3tGPn8cLpDUoLLk2eugWvmuWgEpCE6Wyed7UV3Vzdf2R+9oya9jkA oHI14hrz3xDssg0wlHqbptwsmwAQ1ZBDSB1MpqaLCaUvV8NvtSBLDsZlzwkOj7bP iFZJRFIqRRg0UNWkUBR+BJhWZ7ZcDud2kJcH0mX8/rfthfFa5Oy38Iz8UQOW0uZR lQIDAQAB -----END PUBLIC KEY----- 1.3 准备签名数据

为了简单起见,生成16字节全0的数据作为测试文件:data.bin

# 使用dd命令生成16字节的data.bin $ dd if=http://www.2cto.com/dev/zero of=data.bin bs=1 count=16 16+0 records in 16+0 records out 16 bytes (16 B) copied, 0.000189593 s, 84.4 kB/s # 使用hexdump查看data.bin的内容,16个字节全都是0 $ hexdump -Cv data.bin 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000010 1.4 计算sha256哈希

直接计算data.bin的sha256哈希值:

# 调用openssl dgst计算sha256 $ openssl dgst -sha256 data.bin SHA256(data.bin)= 374708fff7719dd5979ec875d56cd2286f6d3cf7ec317a3b25632aab28ec37bb

也可以将data.bin的sha256哈希值存储到单独的文件:data.bin.sha256

# 将sha256结果输出到文件data.bin.sha256 $ openssl dgst -sha256 -binary -out data.bin.sha256 data.bin # 使用hexdump查看data.bin.sha256文件的内容 $ hexdump -Cv data.bin.sha256 00000000 37 47 08 ff f7 71 9d d5 97 9e c8 75 d5 6c d2 28 |7G...q.....u.l.(| 00000010 6f 6d 3c f7 ec 31 7a 3b 25 63 2a ab 28 ec 37 bb |om<..1z;%c*.(.7.| 00000020 1.5 私钥签名

对数据data.bin使用私钥Key.pem进行签名,生成签名文件:data.bin.signature

# 使用Key.pem对data.bin进行签名,并将签名结果输出到文件data.bin.signature $ openssl dgst -sha256 -out data.bin.signature -sign Key.pem data.bin # 使用hexdump查看签名结果文件data.bin.signature的内容 $ hexdump -Cv data.bin.signature 00000000 7e 59 0f b5 b2 d9 31 f6 af 95 34 79 8d d8 5a a4 |~Y....1...4y..Z.| 00000010 69 02 b9 29 a9 f5 1d 00 6d 84 93 69 8c 65 d3 c9 |i..)....m..i.e..| 00000020 9b 6e 52 48 46 c7 1a b2 71 83 c6 6e 2e bb 6a b0 |.nRHF...q..n..j.| 00000030 bb cf 48 16 49 4d 57 f7 9b e9 0c a6 87 7b 15 cd |..H.IMW......{..| 00000040 f0 ef ac 39 47 ff 81 95 20 eb 67 29 f4 bb 90 bb |...9G... .g)....| 00000050 a2 f8 77 5b 14 14 e4 41 26 cc 1a cd 79 22 de 50 |..w[...A&...y".P| 00000060 d6 c3 8c bc 79 68 38 1d 0c 65 fc 21 72 48 a9 97 |....yh8..e.!rH..| 00000070 4c 55 fc 7e 33 7b 65 0c d9 67 2c 64 01 3f 81 5b |LU.~3{e..g,d.?.[| 00000080 50 16 54 12 7a eb 96 b8 26 a2 13 28 68 8a 6e 7e |P.T.z...&..(h.n~| 00000090 b9 12 ee 49 3e 51 5c 43 ff fd 5d 3a 90 5e 5f 2f |...I>Q\C..]:.^_/| 000000a0 f1 4e 93 73 aa 86 6f 00 e2 b6 0d dc 3d dd 90 da |.N.s..o.....=...| 000000b0 df 7b e7 ae 15 2b 55 04 81 af c3 16 c6 36 79 3b |.{...+U......6y;| 000000c0 74 63 7b 72 f1 ac c8 9f 6f c0 4f 45 74 36 38 27 |tc{r....o.OEt68'| 000000d0 73 2b c2 0b 99 ca 58 14 2b 1e 39 d9 6d 8b 5d e3 |s+....X.+.9.m.].| 000000e0 05 40 99 ef 0e 47 e8 e0 ec d4 c6 f6 a3 50 55 0e |.@...G.......PU.| 000000f0 4a 00 50 d3 80 a0 61 73 38 3a 98 57 15 11 eb 47 |J.P...as8:.W...G| 00000100

这里使用:
- -out选项指定将签名结果存放到data.bin.signature
- -sign选项指定签名使用的私钥Key.pem

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:襄阳网站建设公司 https://www.jingchucn.com/zt/xiangyang_wangzhanjianshe/

COPYRIGHT © 2015 广州双城热恋创意文化传播有限公司 ALL RIGHTS RESERVED. 网站地图 技术支持:肥猫科技
精彩专题:网站建设
购买本站友情链接、项目合作请联系客服QQ:2500-38-100