Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
ZanderDev opened this issue Dec 23, 2015 · 8 comments
Open

Comments

@ZanderDev
Copy link

生成方法 参考
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
Copy link
Author

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

@ZanderDev ZanderDev changed the title 我自己生成公钥私钥不能解密成功,为什么呢 解密不成功,用的我自己生成公钥私钥,demo中的可以 Dec 24, 2015
@amazingYu
Copy link

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

  • (SecKeyRef)addPrivateKey:(NSString *)key{
    NSRange spos = [key rangeOfString:@"-----BEGIN RSA PRIVATE KEY-----"];
    NSRange epos = [key rangeOfString:@"-----END RSA PRIVATE KEY-----"];
    if(spos.location != NSNotFound && epos.location != NSNotFound){
    NSUInteger s = spos.location + spos.length;
    NSUInteger e = epos.location;
    NSRange range = NSMakeRange(s, e-s);
    key = [key substringWithRange:range];
    }
    key = [key stringByReplacingOccurrencesOfString:@"\r" withString:@""];
    key = [key stringByReplacingOccurrencesOfString:@"\n" withString:@""];
    key = [key stringByReplacingOccurrencesOfString:@"\t" withString:@""];
    key = [key stringByReplacingOccurrencesOfString:@" " withString:@""];

    // This will be base64 encoded, decode it.
    NSData *data = base64_decode(key);

    /*************************************/
    data = [RSA stripPrivateKeyHeader:data];//这个方法????
    /**
    ***********************************/

    if(!data){
    return nil;
    }
    .......
    }

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

@amazingYu
Copy link

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

@ZanderDev
Copy link
Author

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

@ideawu
Copy link
Owner

ideawu commented Jan 18, 2016

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

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

@ZanderDev
Copy link
Author

@ideawu 敬业福

@sweetyMo
Copy link

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

@CJaeson
Copy link

CJaeson commented Aug 25, 2016

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants