ideawu / Objective-C-RSA

Doing RSA encryption and decryption with Objective-C on iOS
http://www.ideawu.com/blog/post/132.html
Other
1.15k stars 280 forks source link

解密不成功,用的我自己生成公钥私钥,demo中的可以 #15

Open ZanderDev opened 8 years ago

ZanderDev commented 8 years ago

生成方法 参考 http://blog.csdn.net/lvxiangan/article/details/45318443

生成的公钥私钥如下

NSString *pubkey3 = @"-----BEGIN PUBLIC KEY-----\
\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0kEAhcOo1tdfjDIJBVhK\
\nRHadXe3dkJNmcku93lXOIdP4KA60KiymAnCsDn5hnKXBsw9JRLjfVx7XUdXgo+ED\
\nQ/ik30tvRad7j7IMT4y+aThoe9v/cIFL1VPAaN6FKtbCbn/sLznU0B1hO77fSZIw\
\n70GIxIClmzQE4xn4f6FFphucawE8EMeCIEtyQPpL/UQ4QqCEmrZEUsooFnPMCEw8\
\nWtiQNqzvTVE0PQe3fAEToD5GGZ7zMDtZOW2QwlFsicNP9SgndDTSkGCkxM+qZIsn\
\ny5rOhCCdof62QjLRGiM4TnEwdc3V7LeV/vdVtp+pDQlUr/YEoV6blnib/NgTgDLh\
\nbwIDAQAB\
\n-----END PUBLIC KEY-----";
NSString *privkey3 = @"-----BEGIN RSA PRIVATE KEY-----\
\nMIIEpAIBAAKCAQEA0kEAhcOo1tdfjDIJBVhKRHadXe3dkJNmcku93lXOIdP4KA60\
\nKiymAnCsDn5hnKXBsw9JRLjfVx7XUdXgo+EDQ/ik30tvRad7j7IMT4y+aThoe9v/\
\ncIFL1VPAaN6FKtbCbn/sLznU0B1hO77fSZIw70GIxIClmzQE4xn4f6FFphucawE8\
\nEMeCIEtyQPpL/UQ4QqCEmrZEUsooFnPMCEw8WtiQNqzvTVE0PQe3fAEToD5GGZ7z\
\nMDtZOW2QwlFsicNP9SgndDTSkGCkxM+qZIsny5rOhCCdof62QjLRGiM4TnEwdc3V\
\n7LeV/vdVtp+pDQlUr/YEoV6blnib/NgTgDLhbwIDAQABAoIBAQCBhgPBY9B+UX2O\
\nC0DdZw+Rb5TwSVnF99gTry9PaYKr+j4Ux0Ib/Rdjx29nGlodu0tBeLhFOrJzpA83\
\nXc+ehT6Sv/kpifoJaezHkALfeq/OeC59pwCMmUpTJ94PfI2C33w1wF6KlVDRyFef\
\nC63YT9QPgEq16x6aJwifst8QGRSkB56CjMvsHE9PSOFMPMY/lR2J3G1EBZVyra5j\
\nM+7gQWFY6osgo1Pzn+4T8/9s2cJOu1nrLRbaWGyeNFuVOAF4Q8D8/6XLQa71oV7e\
\nhDxFIvmEmCy5c443XGq5B1re0hGJx8QuxYUuUaM76G92rxVHxk/a0D2r87XxiY71\
\nMQkF8KqRAoGBAOzzlNGlCA/HwSezx69NAXYowznol8bmIN9HM92XBAhLH8BOD8Ud\
\nz7Ue5/BFQDzkW+XvI4bcta8OXSJ3cGBUsfiiaACC32+RtxiktTFR0Q73QJj8qSHp\
\nn0TyVycm556yZNZGU7XwcDkPKBzMeXLu4S6q8tM8tvOJpvgXu7CIsDLnAoGBAOMn\
\n/U03JhpK8bUG1yxyTUOmyl6sSvSbFpthkdRhXWWmx/xOaEp1/eGHW1RJWzGR9Epz\
\nksOCrwukd3cKC9m9E/iRG+mE8I2DwU2uZFOQhZ2kS/9Hb1F/MxM0SZcAo0cAbBzD\
\nrYL8i9WoOr37wSAdqjIfnj/hf3Za509niUvI5pQ5AoGANolpu0bssBUd0/GBCEwF\
\nBhkjtfRe2pyk/D77JQlZGD+SM0TERG40HE/cumR2AI3eyPFdj/DEsGHx9bjf2Iwl\
\n2kAnB9cXbipvpfBi89MM9xDZgVzF4NRQoCHXBV/i95e/tcHCCqIocjmW1eoKGfX5\
\nRjB6azwSL8OC9p8fx+XuCAkCgYEAg77bwH7t0G4LBc0z2wloGoaP9JzE1F1mnTPX\
\nmm/l9WDnuEPZZOZOGxGgPKBXDcbzAoNJaa9PytbWmunuuZhaDt5KbAO4aLszz9QH\
\nSBgYBrgVg7dwrrmxa7/1tmieSj3KdlxfNAs5Ju/tMebjuba60VtZMv+cJ47NfVY1\
\nYQjiArECgYA229nt/888DntuvZQrSde4cEtthVFahgNqHq87lyC1htuwMirKkN+e\
\nnyFw/TV7RcDUctoJ9DRGfwwgIVGdzKx/2iiktfejryBxZX8RB/uIBEKuf+Z6VT8S\
\nkiAnhIGqUu8DUniqsyRztGTTcPx3DDCLBeo/00Q2k9ri1i7+r3Fj1A==\
\n-----END RSA PRIVATE KEY-----";
ZanderDev commented 8 years ago

@ideawu demo 中 公私钥怎么生成的

amazingYu commented 8 years ago

@ZanderDev 我也遇到同样的问题,我看了一下代码

主要是上面方法中我注释的那行代码的问题,把那行代码注释掉,就可以解密成功,但是这样demo中的密钥就又不行了,这个方法我还不明白是干嘛的,希望作者可以解惑 @ideawu

amazingYu commented 8 years ago

又查了一些资料。 BEGIN RSA PRIVATE KEY is PKCS#1,里面只有RSA的私钥信息; BEGIN PRIVATE KEY is PKCS#8,除了私钥,还有些附加信息在前面,比如version和算法。 mac上用openssl生成的key第一种,而php生成的是第二种。所以我想上面提到的方法应该是为了还原key吧

ZanderDev commented 8 years ago

@amazingYu 问题解决了,按照你提供的方案:注释“data = [RSA stripPrivateKeyHeader:data];”。非常感谢你的回答。👍

ideawu commented 8 years ago

谢谢, 这个讨论应该对不少人有帮助.

也许可以通过判断来决定是否调用 stripPrivateKeyHeader(), 我会看看.

ZanderDev commented 8 years ago

@ideawu 敬业福

sweetyMo commented 8 years ago

@ZanderDev MAC下生成的私钥不能直接被使用,需要进行PKCS#8编码 编码之后就可以了 pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt

CJaeson commented 7 years ago

发现你们说的注释 data = [RSA stripPrivateKeyHeader:data]; 这行代码最终可行。最终的问题是判断 if (0x04 != c_key[idx++]) return nil; 这个判断的问题