对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;
分享到:
相关推荐
2. 加密:使用公钥进行加密,调用`RSA_public_encrypt()`函数,传入明文、公钥、加密模式等参数。 3. 解密:使用私钥进行解密,调用`RSA_private_decrypt()`函数,传入密文、私钥、解密模式等参数。 4. 数字签名:...
3. **加密与解密**:使用`RSA_public_encrypt()`和`RSA_private_decrypt()`函数进行数据加密和解密。加密时,输入明文数据和公钥;解密时,输入密文数据和私钥。 AES(Advanced Encryption Standard),即高级加密...
2. **加密过程**:使用公钥对明文进行加密,OpenSSL中的`RSA_public_encrypt()`函数可以完成这个任务。它会将明文转换为一个与密钥长度相等的密文。 3. **解密过程**:解密则是用私钥来完成,对应的OpenSSL函数是`...
openssl rsautl -encrypt -pubin -inkey public_key.pem -in message.txt -out encrypted_message.bin ``` 加密后的数据存储在`encrypted_message.bin`中。解密回原始消息,使用私钥: ```bash openssl rsautl -...
OpenSSL提供了多种加密算法,如AES、RSA、DES等。以下是一个简单的AES加密和解密的例子: ```objc #import <CommonCrypto/CommonCrypto.h> #import "openssl/aes.h" // AES 加密 + (NSData *)AES256EncryptWithKey...
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”暗示了我们将在本文中深入探讨如何使用OpenSSL库执行RSA加密操作,特别是在处理文件方面。OpenSSL是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现工具...
在iOS开发中,OpenSSL库经常被用于处理加密任务,如RSA加密算法。本文将深入探讨如何在iOS平台上,特别是针对arm64和i386两种架构,正确配置和使用OpenSSL库。 OpenSSL是一个强大的安全套接字层密码库,包含各种...
对于RSA运算,如加密和解密,可以调用`RSA_public_encrypt`和`RSA_private_decrypt`函数。同时,OpenSSL还提供了`PEM_write_bio_RSAPrivateKey`和`PEM_read_bio_RSAPublicKey`用于密钥的存储和读取。 测试是验证...
openssl rsautl -decrypt -in encrypted_data.bin -inkey private_key.pem -out decrypted_data.txt ``` 解密后的数据将保存在`decrypted_data.txt`文件中。 4. **安全性考虑**:RSA的安全性依赖于大整数因子...
- JavaScript中,可以使用`crypto.subtle.encrypt()`和`crypto.subtle.decrypt()`方法进行RSA加密和解密。注意,由于JavaScript加密的局限性,通常需要使用OAEP填充方式以提高安全性。 - PHP中,可以使用`openssl_...
**Delphi RSA 加密与解密使用OpenSSL详解** RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因其三位发明者的名字首字母而得名。在Delphi编程环境中,我们可以利用OpenSSL库来...
openssl rsautl -encrypt -pubin -inkey public_key.pem -in plaintext.txt -out ciphertext.bin ``` 这里,`plaintext.txt`是待加密的明文文件,`ciphertext.bin`是加密后的密文文件。 解密数据时,使用私钥: `...
在C++中,OpenSSL提供了`RSA_public_encrypt`和`RSA_private_decrypt`函数来实现这些操作。 ```cpp int encrypted_len; unsigned char *encrypted = new unsigned char[ENCRYPTED_BUFFER_SIZE]; RSA_public_encrypt...
**OpenSSL库与RSA、ASE加密** OpenSSL是一个强大的安全套接字层密码库,包含各种主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用程序供测试或其他目的使用。在信息安全领域,加密技术...
openssl_public_encrypt($data, $encrypted, openssl_pkey_get_public($public_key)); ``` 2. Java端使用私钥解密数据: ```java String encryptedData = "已加密的数据"; PrivateKey privateKey = ...
使用OpenSSL-RSA加密解密 什么是OpenSSL? OpenSSL是开放源代码库,可使用TLS(传输安全层)和SSL(安全套接字层)在网络上提供安全通信。 它支持许多加密算法AES,DSA,RSA,SHA1,SHA2,MD5。。有关更多信息 什么...
本篇文章将深入探讨OpenSSL中的RSA加解密过程,以及如何在实际编程中使用OpenSSL库实现这一功能。 首先,RSA算法基于数论中的大数因子分解难题,它包含两个密钥:公钥和私钥。公钥可以公开,用于加密数据;私钥必须...
4、RSA publicKey Encrypt 和 RSA privateKey Decrypt 5、RSA sign 和 RSA verify: MD5、SHA1、SHA256、SHA512 以上函数为常用,如支付宝支付和微信支付都可用到, openSSL动态链接库:可从我的另外一个上传资源或...
// C/C++, 利用OpenSSL库对Socket传输进行安全加密(RSA+AES) // 1. 利用RSA安全传输AES生成密钥所需的Seed(32字节) // 2. 利用AES_encrypt/AES_decrypt对Socket上面的业务数据进行AES加密/解密 // --- // * 理论上只...