iOS 下的RSA的使用

RSA 在很多地方都要使用,但是在ios下使用RSA就是很麻烦

(为什么在iOS下使用什么东西都会麻烦啊摔!)

好吧,麻烦归麻烦,还是要用的。

首先下载库:RSA for ios

这个东西其实是使用openssl的RSA解密加密库的。

将你下载的东西放到项目里面,不要告诉我不会啊!这个不管!

然后修改:



这样然后你编译一下试试。如果是64位的,那么可能会编译不过哦。需要下面的操作


ok!如果编译过了!那么!还不能用!

众所周知!RSA小朋友是需要公钥和私钥的。这个需要普及的同学请查看百度百科。

你可以在下面这个地方发现你的公钥私钥的位置:


看到那两个pem文件木有?用文本编辑打开就可以看到内容。一般后台那边生成公钥私钥比较好做,你可以直接让他们帮你随机生成一份。

好了,当你把后台给你的公钥,你自己的私钥放进项目以后,你就可以开始使用了!

首先你需要先import如下的文件:

NSString+Base64.h

NSData+Base64.h

RSA.h

然后声明如下方法然后使用就可以加密解密啦!

#pragma mark - Encrypt & Decrypt
- (NSString *)decryptFromCipherText:(NSString *)cipher
{
    
    NSString *privateKeyPath = [[NSBundle mainBundle] pathForResource:@"private_key" ofType:@"pem"];
    NSLog(@"privateKeyPath: %@", privateKeyPath);
    
    char *plainText = js_private_decrypt([cipher UTF8String], [privateKeyPath UTF8String]);
    printf("Plain plain: %s\n", plainText);
    
    return [NSString stringWithUTF8String:plainText];
}

- (NSString *)encryptFromPlainText:(NSString *)plain
{
    
    NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public_key" ofType:@"pem"];
    NSLog(@"publicKeyPath: %@", publicKeyPath);
    
    char *cipherText = js_public_encrypt([plain UTF8String], [publicKeyPath UTF8String]);
    printf("cipher : %s\n", cipherText);
    
    return [NSString stringWithUTF8String:cipherText];
}


祝各位加密解密好运!如在使用的时候有什么问题的,可以私心我或者评论,我会定期查看解答的~谢谢!


iOS和Java都支持RSA加密,但是具体实现可能会有所不同。下面是一个简单的示例: 在iOS使用RSA加密: ```objective-c // 加载公钥文件 NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public_key" ofType:@"der"]; NSData *publicKeyData = [[NSData alloc] initWithContentsOfFile:publicKeyPath]; SecCertificateRef certificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)publicKeyData); // 获取公钥 SecKeyRef publicKey = NULL; SecTrustRef trust; SecPolicyRef policy; policy = SecPolicyCreateBasicX509(); OSStatus status = SecTrustCreateWithCertificates(certificate, policy, &trust); if (status == errSecSuccess) { SecTrustResultType resultType; status = SecTrustEvaluate(trust, &resultType); publicKey = SecTrustCopyPublicKey(trust); } // 使用公钥进行加密 NSString *plainText = @"Hello, world!"; NSData *plainData = [plainText dataUsingEncoding:NSUTF8StringEncoding]; size_t cipherBufferSize = SecKeyGetBlockSize(publicKey); uint8_t *cipherBuffer = malloc(cipherBufferSize); memset(cipherBuffer, 0, cipherBufferSize); OSStatus status = SecKeyEncrypt(publicKey, kSecPaddingPKCS1, [plainData bytes], [plainData length], cipherBuffer, &cipherBufferSize); NSData *cipherData = [NSData dataWithBytes:cipherBuffer length:cipherBufferSize]; NSLog(@"Cipher text: %@", [cipherData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]); ``` 在Java中使用RSA加密: ```java // 加载公钥文件 String publicKeyPath = "/path/to/public_key.der"; byte[] publicKeyBytes = Files.readAllBytes(Paths.get(publicKeyPath)); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(keySpec); // 使用公钥进行加密 String plainText = "Hello, world!"; byte[] plainBytes = plainText.getBytes(StandardCharsets.UTF_8); Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] cipherBytes = cipher.doFinal(plainBytes); System.out.println(Base64.getEncoder().encodeToString(cipherBytes)); ``` 需要注意的是,在iOS使用SecKeyEncrypt函数进行加密时,需要指定填充方式为kSecPaddingPKCS1;在Java中使用Cipher类进行加密时,需要指定填充方式为PKCS1Padding。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值