老徐

Never underestimate your power to change yourself!

关于RSA加密的一些问题

| Comments

做支付的时候经常有各种加密,最常见的算是RSA加密了,以前一直不太明白RSA加密是什么样的,如何工作的,今天看了一些文档,有了一些基本了解,记录下来,做个备份

什么是RSA

RSA是一种非对称加密算法,在公开密钥加密和电子商业被广泛使用,名字是由三个创始人的名字首字母组成,更多信息请查看https://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95

RSA的工作原理

假设A要发送一段文字给B,如果A发送的信息需要使用RSA加密,则整个过程如下 * 首先需要给用户A和B分别生成公钥和私钥,双方的公钥信息都公开,私钥则自己保留
* A要发送一串字符给B,则先使用B的公钥加密,生成密文,B收到密文后使用私钥解密就得到明文 * 同样的道理,B发送一串字符给A,使用A的公钥加密后发送给A,A收到后使用自己的私钥解密就可得到明文 具体的加密、解密算法原理可以看http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

例子

可以看下下面的例子

1
2
3
4
5
6
7
data = '我是明文,给我加密啊'
digest = OpenSSL::Digest::SHA256.new
pkey = OpenSSL::PKey::RSA.new(2048)  #生成2048位的私钥
signature = pkey.sign(digest, data)  #生成签名

pub_key = pkey.public_key #生成公钥
pub_key.verify(digest, signature, data)  #验签签名是否正确

下面是私钥和公钥的数据格式

1
2
3
4
5
6
7
8
pkey.to_pem

-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAw4a9XP0wqRORAm6hvKjrltdX0mfGIOWi4YqLyB4HYwFC0meR\nZbQ8ZtGxZ6wJAZ6uuJm7n4ZmMToPqiQywggCEfFjzjnX9HVPkLzuajXSTAqjihhb\nzs31VrPzwlCNiC+gJoN/UofwBQIVh19fAPPGTPL0Mf4n2zIylJudYQbiaL3Honx1\nL73hmzBeNMR1BbbE/u5ku3RhgYFetY+nxQRqxup8ekO3om6Q3Fd+1gQw0EGdLvl5\nJb7kCR5ZC6o9cB8vUl+f/c1jLm4Buz9AQXpqUAWIbJF2+g3nvGnPQBKHqyOqlzbD\nWgm4K+Bid8gGCUfL9oX4fzJ/DFzLZOpsCesQKQIDAQABAoIBAF4236oeCkN+PSJ5\n4o9AqfyOGTA2dt7FKB4bn003QwHuyp8N7p6eIXi91AkLeW+BYdlrol+06CsSOhgW\nxyp9p1m0Ag6OCsQtfsBUeWFOO94ORk01fY+B6JT1syBPplMX98h3FnPTMtGG9o67\nYtDXphbP/uDUAap6XqsC7Oui4Jfs+k2uPmDFQ139sgIKme4jS9Ee7XQ+IReL25VA\nSF2V2ADgrxHqZ7126YCtJyKxA2K8h8PLy47hw0slln/W+FJ4ArAPsRbN1yiQDrAn\nldRublnTBMvAGBWqSRgZUqT4KvfmnIySGzyfe2/HdSzW5gHIRgWqTtUecL+rYbah\neJeY9AECgYEA8B2NrZ1/neYZXdE0NFQAx3U4JeMD9WxSk8PJib8t1IxG2D8/mXug\n8TGf5TwqWHo79X3YXE25fX0WmNjI6gw7CwYd8vskldvjt2Aw3hiJfTNXrUKtcyAi\nIfGqXT/hiWoeYMsRtv9oZ4INcIrSWychcyGxNdKobRXs7oHe0jjFPqkCgYEA0HYN\ndnjhYqw4fXf2hsc/medewPrtoHI9TXgBRDsEJDYT5RAMBklhg33RNd/LQKFRPtqh\ngMLNqnku6rkIi18GRP/hdOyuzR/lbGTQey1K0pnoX32LTBNMACP7hIe6YIvt9jdj\n8wfxzjmnMZvsyKt564m4ZCexgpZleaEBzFARtYECgYBMRfcFWWx6aedQ5+2fWbfN\npCyrzEsroLcyfRT+Dp6uT8kJVD4NsTnUpCDYnp4M8Pcu6kTaPU5Y0G1nLCXWQwBW\nZiEJWEGs4OabD5E2W7EA9lg5j16tnV16TtwBNxObpPv1X0xHRyaRCrzeLRrZHbsA\naYlzQXGDBV33/YUcXjA50QKBgQC12bYm2o6reFeTRJpfuuNFzCvBp2SyadYGhaB9\nOAqF2FMEqToEJfGWNqTSHZd+mvt4HFt1KvslMq/1/VJx2oRqntm8GVjoAmIua8ff\nHITAMZkf7DIfPFo5aSpZ09mHran59xoPAag0YeDzivVFnSkviyW64VGd/LsrHoSm\nCldYgQKBgBzMtLh+YLQlDfBPt6IDggi+p1qdMEU8v+e6pBm7sBTRPplAoXeQfCvJ\nv9Ix60+2NH5KKSAqvSYpNqRtWNGIA2zi/5an1clmKBVpK9EVtOy5qiTcNziyhHdQ\nq8m7UWJRpck8R88N1DFadxEqb6HfwnW/6DclKbKIgwxQYQA/Ug2y\n-----END RSA PRIVATE KEY-----\n


pub_key.to_pem

-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw4a9XP0wqRORAm6hvKjr\nltdX0mfGIOWi4YqLyB4HYwFC0meRZbQ8ZtGxZ6wJAZ6uuJm7n4ZmMToPqiQywggC\nEfFjzjnX9HVPkLzuajXSTAqjihhbzs31VrPzwlCNiC+gJoN/UofwBQIVh19fAPPG\nTPL0Mf4n2zIylJudYQbiaL3Honx1L73hmzBeNMR1BbbE/u5ku3RhgYFetY+nxQRq\nxup8ekO3om6Q3Fd+1gQw0EGdLvl5Jb7kCR5ZC6o9cB8vUl+f/c1jLm4Buz9AQXpq\nUAWIbJF2+g3nvGnPQBKHqyOqlzbDWgm4K+Bid8gGCUfL9oX4fzJ/DFzLZOpsCesQ\nKQIDAQAB\n-----END PUBLIC KEY-----\n

Comments