`
re_reference
  • 浏览: 236640 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

IOS openssl rsa encrypt/decrypt

阅读更多
对OpenSSL RSA加解密的封装请移步到:
https://github.com/reference/OpenSSLRSAWrapper

本例子只是一个说明。

大家都清楚在ios上是存在加解密api,库是调用security,一般只用来公钥加密,私钥解密。用途局限,但是一旦反过来便不支持了。也便是大家常说的数字认证签名功能(很容易跟RSA加解密的基本功能混淆)。

1、Openssl --RSA加密算法的使用。

这两天简单的学习了一下openssl的使用。相关的介绍,可以在网上搜,挺多的。有些容易迷糊的概念,例如加密与身份验证,什么时候用公钥加密,什么时候用私钥。如果学习过密码学,应该很简单理解,我没学过,刚理解了些,赶紧记下,以防忘记。

用大家熟知C-S结构分析下吧:

首先请注意,公钥和私钥是一配一的,一个公钥对应一个私钥。

1)加密

客户和服务器通信,服务器要保证与客户通信的数据被保密,所以服务器会给客户一个公钥,客户用此公钥将自己的数据加密。然后将加密后的数据发给服务器,服务器用自己的私钥解开密文还原成真的数据。公钥是可以公开的,没有必要保护它,因为你能用它加密,但是加密后,没有私钥,你确是无法解密的。即你没法解开别人用此公钥加密的数据。你也就无法知道别人的数据。

2)身份验证

有时候服务器需要确定客户端的身份,所以需要客户端发送唯一的自己的标识,让服务器确定自己的身份。如何发呢?这就用的到私钥了。首先需要客户端用自己的私钥将特征码加密后,将此数据发给服务器,服务器将使用你的公钥对密文进行解密,如果解密成功可唯一确定这是用你的私钥加密的密文。只要你不泄露私钥,那么使用私钥的人肯定是你。其实这个逻辑挺简单的。


简单地做了一个例子。

const char * input = "fffffff fffff==\"~!@#$^ &* ()-_=+|?/.,`%%\"";
    
    RSA *_rsa = RSA_generate_key(1024,RSA_F4,NULL,NULL);
    
    
    //encrypt with private key
    int flen = RSA_size(_rsa);
    char *encData =  (char *)malloc(flen);
    bzero(encData, flen);
    
    //encrypt
    int status =  RSA_private_encrypt(flen,
                                      (unsigned char*)input,
                                      (unsigned char*)encData,
                                      _rsa,
                                      RSA_NO_PADDING);
    if (status) {
        NSData *data = [NSData dataWithBytes:encData length:status];
        
        flen = RSA_size(_rsa);
        char *decData =  (char *)malloc(flen);
        bzero(decData, flen);
        
        //decrypt
        status =  RSA_public_decrypt(flen,
                                     (unsigned char*)[data bytes],
                                     (unsigned char*)decData,
                                     _rsa,
                                     RSA_NO_PADDING);
        if (status) {
            NSLog(@"\n ------------\ndecData is %s\n---------------\n",decData);
            
        }else
            NSLog(@"----error RSA_public_decrypt");
        
        free(decData);
        encData = NULL;
    }else
        NSLog(@"----error RSA_private_encrypt");
    
    free(encData);
    encData = NULL;
分享到:
评论
1 楼 hyc4117 2014-05-14  
#define OpenSSLRSAPublicKeyFile [OpenSSLRSAKeyDir stringByAppendingPathComponent:@"publicKey.pem"]
请问我改了这个和那个密钥的,怎么还可以加解密。我是想要改成自己的密钥和公钥。
- (BOOL)exportRSAKeys这个方法没调用也可以加解密。
帮帮,谢谢啦

相关推荐

    Rsa.rar_RSA openssl_openssl rsa_openssl rsa c_rsa

    2. 加密:使用公钥进行加密,调用`RSA_public_encrypt()`函数,传入明文、公钥、加密模式等参数。 3. 解密:使用私钥进行解密,调用`RSA_private_decrypt()`函数,传入密文、私钥、解密模式等参数。 4. 数字签名:...

    OpenSSL RSA AES加密解密C++源码

    3. **加密与解密**:使用`RSA_public_encrypt()`和`RSA_private_decrypt()`函数进行数据加密和解密。加密时,输入明文数据和公钥;解密时,输入密文数据和私钥。 AES(Advanced Encryption Standard),即高级加密...

    rsa_test.rar_c openssl RSA_openssl rsa_rsa_rsa openssl

    2. **加密过程**:使用公钥对明文进行加密,OpenSSL中的`RSA_public_encrypt()`函数可以完成这个任务。它会将明文转换为一个与密钥长度相等的密文。 3. **解密过程**:解密则是用私钥来完成,对应的OpenSSL函数是`...

    RSA.zip_openssl rsa_rsa openssl

    openssl rsautl -encrypt -pubin -inkey public_key.pem -in message.txt -out encrypted_message.bin ``` 加密后的数据存储在`encrypted_message.bin`中。解密回原始消息,使用私钥: ```bash openssl rsautl -...

    iOS openssl加密解密DEMO

    OpenSSL提供了多种加密算法,如AES、RSA、DES等。以下是一个简单的AES加密和解密的例子: ```objc #import <CommonCrypto/CommonCrypto.h> #import "openssl/aes.h" // AES 加密 + (NSData *)AES256EncryptWithKey...

    encrypt-decrypt-file-using-openssl:使用openssl加密和解密文件

    encrypt-decrypt-file-using-openssl encrypt & decrypt file using openssl 生成私钥: openssl genrsa -out private.pem 2048 生成公钥: openssl rsa -in private.pem -pubout > public.pem 在Linux下的编译:gcc...

    read.rar_openssl rsa 文件_rsa openssl

    标题中的“read.rar_openssl rsa 文件_rsa openssl”暗示了我们将在本文中深入探讨如何使用OpenSSL库执行RSA加密操作,特别是在处理文件方面。OpenSSL是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现工具...

    IOS openssl 支持arm64 i386

    在iOS开发中,OpenSSL库经常被用于处理加密任务,如RSA加密算法。本文将深入探讨如何在iOS平台上,特别是针对arm64和i386两种架构,正确配置和使用OpenSSL库。 OpenSSL是一个强大的安全套接字层密码库,包含各种...

    Alg.rar_3des openssl_OPENSSL 3DES_openssl rsa_openssl测试_openssl测

    对于RSA运算,如加密和解密,可以调用`RSA_public_encrypt`和`RSA_private_decrypt`函数。同时,OpenSSL还提供了`PEM_write_bio_RSAPrivateKey`和`PEM_read_bio_RSAPublicKey`用于密钥的存储和读取。 测试是验证...

    openssl rsa算法加密

    openssl rsautl -decrypt -in encrypted_data.bin -inkey private_key.pem -out decrypted_data.txt ``` 解密后的数据将保存在`decrypted_data.txt`文件中。 4. **安全性考虑**:RSA的安全性依赖于大整数因子...

    JS实现openssl式RSA,可与php互通

    - JavaScript中,可以使用`crypto.subtle.encrypt()`和`crypto.subtle.decrypt()`方法进行RSA加密和解密。注意,由于JavaScript加密的局限性,通常需要使用OAEP填充方式以提高安全性。 - PHP中,可以使用`openssl_...

    Delphi RSA加密与解密OpenSSL

    **Delphi RSA 加密与解密使用OpenSSL详解** RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因其三位发明者的名字首字母而得名。在Delphi编程环境中,我们可以利用OpenSSL库来...

    openssl RSA加密解密

    openssl rsautl -encrypt -pubin -inkey public_key.pem -in plaintext.txt -out ciphertext.bin ``` 这里,`plaintext.txt`是待加密的明文文件,`ciphertext.bin`是加密后的密文文件。 解密数据时,使用私钥: `...

    openssl RSA、ASE加密

    **OpenSSL库与RSA、ASE加密** OpenSSL是一个强大的安全套接字层密码库,包含各种主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用程序供测试或其他目的使用。在信息安全领域,加密技术...

    C++使用Openssl进行RSA加密解密及签名验签功能(SHA256)

    在C++中,OpenSSL提供了`RSA_public_encrypt`和`RSA_private_decrypt`函数来实现这些操作。 ```cpp int encrypted_len; unsigned char *encrypted = new unsigned char[ENCRYPTED_BUFFER_SIZE]; RSA_public_encrypt...

    PHP OpenSSL实现RSA加密解密(通java)

    openssl_public_encrypt($data, $encrypted, openssl_pkey_get_public($public_key)); ``` 2. Java端使用私钥解密数据: ```java String encryptedData = "已加密的数据"; PrivateKey privateKey = ...

    Encrypt-Decrypt-with-OpenSSL---RSA:使用openssl进行数据加密和解密-RSA

    使用OpenSSL-RSA加密解密 什么是OpenSSL? OpenSSL是开放源代码库,可使用TLS(传输安全层)和SSL(安全套接字层)在网络上提供安全通信。 它支持许多加密算法AES,DSA,RSA,SHA1,SHA2,MD5。。有关更多信息 什么...

    OpenSSL-RSA加解密示例

    本篇文章将深入探讨OpenSSL中的RSA加解密过程,以及如何在实际编程中使用OpenSSL库实现这一功能。 首先,RSA算法基于数论中的大数因子分解难题,它包含两个密钥:公钥和私钥。公钥可以公开,用于加密数据;私钥必须...

    openssl_vfp.rar

    4、RSA publicKey Encrypt 和 RSA privateKey Decrypt 5、RSA sign 和 RSA verify: MD5、SHA1、SHA256、SHA512 以上函数为常用,如支付宝支付和微信支付都可用到, openSSL动态链接库:可从我的另外一个上传资源或...

    安全Socket(SSL)加密方法

    // C/C++, 利用OpenSSL库对Socket传输进行安全加密(RSA+AES) // 1. 利用RSA安全传输AES生成密钥所需的Seed(32字节) // 2. 利用AES_encrypt/AES_decrypt对Socket上面的业务数据进行AES加密/解密 // --- // * 理论上只...

Global site tag (gtag.js) - Google Analytics