简单理解rsa的加密和签名

我们先动手在linux上生成一下rsa
Ps:openssl是一堆加密算法和安全协议的开源集合,像RSA,DES,MD5,RC4等等,都能在openssl里面找到源代码.

用openssl指定生成test.key文件,其中包含公钥+私钥,1024为生成密钥长度

tb@tb:~/mimi$ openssl genrsa -out test.key 1024Generating RSA private key, 1024 bit long modulus.++++++....................................................++++++e is 65537 (0x10001)

可以简单查看下,注意这里包括私钥+公钥

vim test.key-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQCpS7mxdU6svbDcs10qbq9f9t5D4yfqC1jLmZD3GDD4D/8TbNkfvcYDvde6nyPRSxrnzl9YmZhJKlP2iCIwdwwmW6yulXZyvPurfN/1AJt4JYDxnN/qu1bSG5DZMribLsR2dlfA5J0D6lQ7g40eSgp4D6UWy8ezLy6UWFQCrnUHEQIDAQABAoGAQCQeoKtvOWdNIPEb9T2mWFdx8oqXzsapx8nQ8K1LsFBvNe7hfHMsGLLOjzhIG7223eiEm07mMaJF2XvOaEpSYX/qQ1LZRSdBrzCec1lcDbB95dcRg9NmgBuCpUxE3SGYm3VB8rurfsrRUUYoIbjWz8qyuIGdMbaNkHG/CpnUYpkCQQDfWYDYtQ3DxCt+JBoLfuCykk8+nIV12CIYb023naoR2s/aQQRk9BkGCkDrdOAgZAN3BGOHYseKAfTPnARDzfiDAkEAwgtYfgCDTOfW5/kJK1lZO21CdCCZnePwGYmWDLPzNiJIn8k0U6Ig9GmxG+0GKzY71XO8W3Nh18ilZbX9dYel2wJASQ+AJGNlc0pyZ7rrgiMo4YEWxwZwadIfpRqTs6KxhVGseFqYU2W94cns3pjG0BGnSIF5BUp8t1pYeKkyg/OWfQJBAK1wmq41IycQaoR5kfqPKDT32dgWc3gvDqKk2duM1KzkQ+meXAkM90u/VLDTURo6pYyKoCdVoHTRQRUCcAQnNNUCQQCO/zDRaY+5ssjPqj77eJqWfAhtbSDRRw+NurmUSas1FT1cD5nil+uT48bIRoC5nk/XWfvAvMg/Yw5bslGUNx7f-----END RSA PRIVATE KEY-----

~
通过下面命令将公钥提取出来,好像没有提取出来私钥的。我猜是因为如果用来加密,只能用公钥加密,私钥解密。如果用私钥加密,大家都可能有公钥,所以没什么卵用

tb@tb:~/mimi$ openssl rsa -in test.key -pubout -out test_pub.keywriting RSA key

此时我们有公钥test_pub.key和公钥+私钥test.key

tb@tb:~/mimi$ lstest.key  test_pub.key

可以查看下公钥,短了点

tb@tb:~/mimi$ vim test_pub.key -----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpS7mxdU6svbDcs10qbq9f9t5D4yfqC1jLmZD3GDD4D/8TbNkfvcYDvde6nyPRSxrnzl9YmZhJKlP2iCIwdwwmW6yulXZyvPurfN/1AJt4JYDxnN/qu1bSG5DZMribLsR2dlfA5J0D6lQ7g40eSgp4D6UWy8ezLy6UWFQCrnUHEQIDAQAB-----END PUBLIC KEY-----tb@tb:~/mimi$   

我们为了测试,新建了一个demo.php

tb@tb:~/mimi$ cat demo.php demo.php,-in指定加密文件,-inkey 指定密钥,-pubin 意思用公钥加密-out输出文件

tb@tb:~/mimi$ openssl rsautl -encrypt -in demo.php -inkey test_pub.key -pubin -out demo.en
tb@tb:~/mimi$ ls
demo.en demo.php test.key test_pub.key

我们看加密后的demo.php,完全看不懂。。看来加密成功。

tb@tb:~/mimi$ cat demo.en
z0?!1I¢+i2?Y? 縏,°?¨IB?}?¤9§???stBI
??]〢sk膷j-???1日T-′.)
J?qz+{°Qˉ3

tb@tb:~/mimi$

然后我们需要把加密后的demo.php解密回来,-inkey指定解密文件,

tb@tb:~/mimi$ openssl rsautl -decrypt -in demo.en -inkey test.key -out demo.cn

下面的demo.cn就是解密后的文件,

tb@tb:~/mimi$ ls
demo.cn demo.php test_pub.key
demo.en test.key
tb@tb:~/mimi$ cat demo.cn
公钥加密,私钥解密。
二-->私钥签名,公钥验证。

HELP

不知道具体参数有哪些,可以这样简单看一下。
openssl rsa --h
unknown option --h
rsa [options] outfile
where options are
-inform arg input format - one of DER NET PEM
-outform arg output format - one of DER NET PEM
-in arg input file
-sgckey Use IIS SGC key format
-passin arg input file pass phrase source
-out arg output file
-passout arg output file pass phrase source
-des encrypt PEM output with cbc des
-des3 encrypt PEM output with ede cbc des using 168 bit key
-seed encrypt PEM output with cbc seed
-aes128, -aes192, -aes256 encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256 encrypt PEM output with cbc camellia
-text print the key in text
-noout don't print key out
-modulus print the RSA key modulus
-check verify key consistency
-pubin expect a public key in input file
-pubout output a public key
-engine e use engine e, possibly a hardware device.

关键字:rsa, openssl, 公钥, mimi


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部