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);
    }
}

很抱歉通过翻译问你一个不成熟的问题。

当然可以。要实施您需要以下内容。

  1. 您需要加密的字节流。
  2. RSA 模数和指数。假设模数是 n 字节长。

现在要加密流,您可以按如下方式进行。

  1. 使用 n 字节长的字节块。如果不是,用零填充(后缀)。
  2. 将块提高到指数的幂(例如,使用连续的平方)并计算模数。
  3. 如果结果不是 n 字节长,则再次用零填充(这次是前缀)。

就是这样,你有一个加密流。