问题描述
今天,我使用openssl实现了rsa加密逻辑。没有像openssl这样的外部库有可能吗?使用由模数和指数组成的公钥。
我的消息来源大致是这样的。
-(Nsstring *)hexWithData:(unsigned char *)data ofLength:(NSUInteger)len
{
NSMutableString *tmp = [NSMutableString string];
for (NSUInteger i = 0; i < len; i++) {
[tmp appendFormat:@"%02x",data[i]];
}
return tmp;
}
-(void)EncryptionWithRSA
{
RSAGenWithSecurity *akClass = [[RSAGenWithSecurity alloc] init];
Nsstring *plainText = [akClass ParseJWT];
const char *plain = [plainText UTF8String];
RSA *publickey = [self GenKeyWithRSA];
int rsa_length = RSA_size(publickey);
unsigned char *crip[rsa_length];
Nsstring *result = [[Nsstring alloc] init];
int irsaRet = RSA_public_encrypt(strlen(plain),(const unsigned char *)plain,(unsigned char *)crip,publickey,RSA_PKCS1_PADDING);
if(irsaRet <= 0) {
NSLog(@"encrypt Failed");
result = @"";
} else {
result = [self hexWithData:crip ofLength:rsa_length];
// result = [Nsstring stringWithUTF8String:(char *)crip];
NSLog(@"encrypt success: %@",result);
}
}
很抱歉通过翻译问你一个不成熟的问题。
解决方法
是的,当然有可能。要实施,您需要具备以下条件。
- 需要加密的字节流。
- RSA 模数和指数。假设模数是
n
字节长。
现在要加密流,您可以按如下方式进行。
- 使用一个长度为
n
字节的字节块。如果没有,用零填充(后缀)。 - 将块提升到指数的幂(例如使用连续平方)并计算模数。
- 如果结果不是
n
字节长,则再次填充零(这次是前缀)。
就是这样,你有一个加密的流。