RSA 公钥密码 的代码
时间: 2024-05-02 20:03:53 浏览: 254
以下是使用Python实现RSA公钥密码的示例代码:
```python
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 生成RSA密钥对
key = RSA.generate(2048)
# 获取公钥
public_key = key.publickey()
# 加密数据
data = b'Hello, World!'
cipher = PKCS1_OAEP.new(public_key)
encrypted_data = cipher.encrypt(data)
# 解密数据
cipher = PKCS1_OAEP.new(key)
decrypted_data = cipher.decrypt(encrypted_data)
print('原始数据:', data)
print('加密后:', encrypted_data)
print('解密后:', decrypted_data)
```
请注意,这个示例使用了Python的`Crypto`库,需要先使用pip安装:
```
pip install pycrypto
```
相关问题
RSA公钥密码c++代码
RSA是一种非对称加密算法,它基于大数因子分解的难度。以下是简单的RSA公钥密码在C++中的代码实现概述:
```cpp
#include <openssl/pem.h>
#include <openssl/rsa.h>
// 生成RSA密钥对
void generate_rsa_key_pair(RSA** pub_key, RSA** priv_key, int key_size) {
RSA* rsa = RSA_new();
BIGNUM* e = BN_new(), *n = BN_new();
// 设置公钥参数
BN_set_word(e, RSA_F4);
RSA_generate_key_ex(rsa, key_size, e, n);
*pub_key = rsa;
*priv_key = NULL; // 私钥通常不会直接返回给用户
// 序列化公钥到PEM格式
pem_error_start();
const char* pem_pub_key = PEM_write_RSAPublicKey(*pub_key, NULL);
if (pem_pub_key == NULL) {
// 错误处理
perror("Error writing public key");
}
}
// 加密函数
std::string encrypt(const std::string& plaintext, RSA* pub_key) {
BIO* bio = BIO_new(BIO_s_mem());
BUF_MEM* buf = BUF_MEM_new();
// 将明文转成二进制
unsigned char* input = (unsigned char*)plaintext.c_str();
int in_len = plaintext.size();
RSA_public_encrypt(in_len, input, bio, pub_key, RSA_PKCS1_OAEP_PADDING);
BIO_get_mem_ptr(bio, &buf);
std::string encrypted(buf->data, buf->length);
// 清理内存
BIO_free_all(bio);
BUF_MEM_free(buf);
return encrypted;
}
// 简单示例,未包含错误处理和私钥解密部分
int main() {
RSA** pub_key = new RSA*[1]; // 公钥指针
RSA** priv_key = new RSA*[1]; // 私钥指针
generate_rsa_key_pair(pub_key, priv_key, 2048); // 生成2048位密钥对
std::string message = "Hello, RSA!";
std::string encrypted_message = encrypt(message, *pub_key);
delete[] pub_key;
delete[] priv_key;
return 0;
}
```
注意:这个代码片段仅用于演示基本原理,实际生产环境中需要更严谨的错误处理、内存管理和密钥管理。此外,`BIO`和`BUF_MEM`是OpenSSL库提供的功能,用于处理生物链路(Bio LInk),这里简化了。
用C语言生成一个RSA 公钥密码的代码
以下是使用C语言生成RSA公钥密码的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
// 计算a和b的最大公约数
int gcd(int a, int b) {
int temp;
while (b != 0) {
temp = b;
b = a % b;
a = temp;
}
return a;
}
// 计算a和b的最小公倍数
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
// 判断n是否为素数
int is_prime(int n) {
if (n <= 1) {
return 0;
}
int i;
for (i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
// 生成RSA公钥密码
void generate_rsa_key(int *p, int *q, int *n, int *e) {
// 随机生成两个素数p和q
srand((unsigned)time(NULL));
do {
*p = rand() % 100 + 1;
} while (!is_prime(*p));
do {
*q = rand() % 100 + 1;
} while (!is_prime(*q));
// 计算n和L(n)
*n = (*p) * (*q);
int L = lcm((*p - 1), (*q - 1));
// 随机选择一个与L(n)互质的整数e
do {
*e = rand() % (L - 2) + 2;
} while (gcd(*e, L) != 1);
}
int main() {
int p, q, n, e;
generate_rsa_key(&p, &q, &n, &e);
printf("p: %d\nq: %d\nn: %d\ne: %d\n", p, q, n, e);
return 0;
}
```
此代码生成两个随机素数p和q,计算它们的乘积n以及L(n),然后随机选择一个与L(n)互质的整数e作为公钥。最终输出p、q、n和e。注意,此代码仅用于演示目的,生成的公钥密码并不安全,实际应用中需要使用更复杂的算法和更长的密钥长度。
阅读全文