【问题标题】:Objective-c / Is it possible to encrypt rsa using modulus and exponent without external library?Objective-c / 是否可以在没有外部库的情况下使用模数和指数加密 rsa?
【发布时间】:2021-07-02 00:18:42
【问题描述】:

今天,我使用 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);
    }
}

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

【问题讨论】:

    标签: objective-c public-key-encryption modulo exponent


    【解决方案1】:

    是的,当然有可能。要实施,您需要具备以下条件。

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

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

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

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

    【讨论】:

    • 我明白你的回答,但我还不知道如何实现逻辑。你有什么可以参考的例子吗?
    • 这不是小事。我认为您必须先在纸上解决它,然后再实施。填充是简单的一点。如果你在 Objective-C 中实现,你需要一些方法来表示非常大的整数。我开发了自己的库以在低级 C 中执行此操作以提高性能,但您可以使用 Accelerate 的 vBigNum 来执行此操作。
    • 感谢您的回复。我们应该按照您告诉我们的方式直接实现逻辑。我也很遗憾我只是试图解决它太容易了。
    猜你喜欢
    • 2012-10-14
    • 2011-04-21
    • 2011-01-18
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2010-10-31
    • 2016-04-10
    • 2012-08-15
    相关资源
    最近更新 更多