MAC OS下OpenSSL生成私钥和公钥以及RSA加密

转载地址:http://blog.sina.com.cn/s/blog_8589a6890102vitk.html
MAC OS自带了OpenSSL,直接在命令行里使用OPENSSL就可以。
(1)生成公钥和私钥
打开命令行工具,然后输入 openssl打开openssl,接着只要三句命令就可以搞定。第一句命令生成私钥;第二句命令把RSA私钥转换成PKCS8格式,密码为空就行;第三句命令生成公钥。

Last login: Fri Sep 12 00:59:51 on ttys000
stormerdeiMac:~ stormer$ openssl
OpenSSL> genrsa -out rsa_private_key.pem 1024
Generating RSA private key, 1024 bit long modulus
....++++++
..................++++++
e is 65537 (0x10001)
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt
Enter Encryption Password:
Verifying - Enter Encryption Password:
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIICoTAbBgkqhkiG9w0BBQMwDgQIStQxV5Ap0rECAggABIICgCN+n27Qujr/tQ5B
sTUoYmJWY+SBkv4NdwKFgkqPODbbVnpyLyDXO5BDgyjql6mdrOnGmYL1GYoNWHiy
BlBVvGLVwZodummJIVYRTyQoeazUSsdv0ahxf1mpSvhJzHpycUwPo9BY+uLCFISq
bqaZoHhQeKy48+tqSlv1gcff4PFjaws9TUoHQ/S65FYs/Jhhso3fGYIH3jPeU73K
kmKa4Y5tJWdj5SChJPZKUR3/1hw4+KQqpVrTNwkov98gIYhrls/lFTHTM9iWKVY+
GXc2SEbnyDZwx6Wu4N6wnM5iXKNh+wPMM2Fwsml9Pcqh2Z2spG0yaKARhCiVKPTn
mtVK5QcLYlSqmLF/Z3DkI2Pd4ve//1dsyHr9gO+GK0BX1B6ihx0yf21gMRULH7PS
qmQJrMtQCyUfJNtKViVub/dsXGb9bgecAX8xzP2kBlfuNnle45gCTAlqQ53OkCM6
M41P+RQdgJ4OQXVMiiIRZzmYCn+Mxz64B7f5DFU+7tMMQV2rpPBr4aWCXOllkU/Z
h7eRLfnxzoTgm29KIYTabiwQMxa03o9pzJeI9yFvmdwwA40wGknh5PJTFsUJw57r
KV6qZpP8cHzydWqLyJBJ0s2YOALuZI8nd2y3lGK3eyWqDERcD0ChH1sraV2jccB+
oHAq4OU1rAskukhvP7GxUkut7yZGZ9b57L0ILP+764OZOqMlmwsTbO3oKaHi7YeV
xlTS9WQFw2cde1FJXV/IpHR1+mU7OdIXLRQwcWwrguSSEhD4V6YKN5mO69XPuTzD
Q5qYvo7HtFg8SQ6pQZMQFQE0xS7tHf9DjP+XjXUUwJx8C9DPZlMB02bH47cMG6Jf
Q/Zb1I4=
-----END ENCRYPTED PRIVATE KEY-----
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
writing RSA key

最后附上截图。
这里写图片描述
生成的文件:
这里写图片描述

(2)生成.der文件
1、创建证书请求(按照提示输入信息)
openssl req -new -out cert.csr -key private_key.pem
2、自签署根证书
openssl x509 -req -in cert.csr -out rsa_public_key.der -outform der -signkey rsa_private_key.pem -days 3650
3、验证证书。把public_key.der拖到xcode中,如果文件没有问题的话,那么就可以直接在xcode中打开,看到证书的各种信息。如下图所示:

参考:
1. (原创)如何生成以及导入X.509证书
http://hi.baidu.com/five00/blog/item/43bf1fd77df2d8d9a044df39.html
2. ios下使用rsa算法与php进行加解密通讯
http://blog.yorkgu.me/2011/10/27/rsa-in-ios-using-publick-key-generated-by-openssl/
3. Certificate, Key, and Trust Services Reference
http://developer.apple.com/library/mac/#documentation/security/Reference/certifkeytrustservices/Reference/reference.html
4. X509
http://baike.baidu.com/view/2841580.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的示例,展示了如何使用 OpenSSL 库进行 RSA 加密和解密。 首先,我们需要生成一对 RSA 密钥。这可以使用以下命令完成: ``` openssl genrsa -out private_key.pem 2048 openssl rsa -in private_key.pem -pubout -out public_key.pem ``` 其中,`private_key.pem` 是生成私钥文件,`public_key.pem` 是生成公钥文件。 接下来,我们可以使用以下代码来进行 RSA 加密和解密: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/rsa.h> #include <openssl/pem.h> int main() { RSA *rsa = NULL; FILE *fp = NULL; int rsa_len = 0; unsigned char *encrypted = NULL; unsigned char *decrypted = NULL; // 读取公钥文件 fp = fopen("public_key.pem", "r"); if (fp == NULL) { printf("Failed to open public key file\n"); return -1; } rsa = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL); fclose(fp); if (rsa == NULL) { printf("Failed to read public key\n"); return -1; } // 计算 RSA 密钥长度 rsa_len = RSA_size(rsa); // 分配加密和解密缓冲区 encrypted = (unsigned char*)malloc(rsa_len * sizeof(unsigned char)); decrypted = (unsigned char*)malloc(rsa_len * sizeof(unsigned char)); // 要加密的明文 const char *plain_text = "Hello, RSA!"; int plain_text_len = strlen(plain_text); // 加密明文 int encrypted_len = RSA_public_encrypt(plain_text_len, (unsigned char*)plain_text, encrypted, rsa, RSA_PKCS1_PADDING); if (encrypted_len == -1) { printf("Failed to encrypt\n"); return -1; } // 输出加密后的结果 printf("Encrypted: "); for (int i = 0; i < encrypted_len; i++) { printf("%02x", encrypted[i]); } printf("\n"); // 读取私钥文件 fp = fopen("private_key.pem", "r"); if (fp == NULL) { printf("Failed to open private key file\n"); return -1; } rsa = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL); fclose(fp); if (rsa == NULL) { printf("Failed to read private key\n"); return -1; } // 解密密文 int decrypted_len = RSA_private_decrypt(encrypted_len, encrypted, decrypted, rsa, RSA_PKCS1_PADDING); if (decrypted_len == -1) { printf("Failed to decrypt\n"); return -1; } // 输出解密后的结果 printf("Decrypted: %s\n", decrypted); free(encrypted); free(decrypted); return 0; } ``` 在上述示例中,我们首先读取公钥文件,然后计算 RSA 密钥长度,并分配加密和解密缓冲区。接下来,我们使用 `RSA_public_encrypt` 函数对明文进行加密,并使用 `RSA_private_decrypt` 函数对密文进行解密。在解密后,我们可以输出解密后的结果。 需要注意的是,在实际使用中,我们应该使用更安全的填充方式,如 RSA OAEP 填充。此外,为了确保安全,我们应该使用随机数生成器来生成 RSA 密钥。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值