Objective-c / 是否可以在没有外部库的情况下使用模数和指数来加密 rsa?
Objective-c / Is it possible to encrypt rsa using modulus and exponent without external library?
今天使用openssl实现了rsa加密逻辑。没有像 openssl 这样的外部库是否可能?使用由模数和指数组成的 public 键。
我的源码大致是这样的
-(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
字节长,则再次用零填充(这次是前缀)。
就是这样,你有一个加密流。
今天使用openssl实现了rsa加密逻辑。没有像 openssl 这样的外部库是否可能?使用由模数和指数组成的 public 键。
我的源码大致是这样的
-(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
字节长,则再次用零填充(这次是前缀)。
就是这样,你有一个加密流。