ras加密解密算法C语言
时间: 2023-07-10 08:23:16 浏览: 253
RAS加密解密算法是一种非对称加密算法,常用于数据加密和数字签名。以下是RAS加密解密算法的C语言实现示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main()
{
RSA *rsa = NULL;
BIO *pubkeybio = NULL;
BIO *prikeybio = NULL;
unsigned char *msg = "Hello, world!";
unsigned char *encrypted = NULL;
unsigned char *decrypted = NULL;
int encryptedlen, decryptedlen;
// 生成RSA密钥对
rsa = RSA_generate_key(2048, RSA_F4, NULL, NULL);
if (rsa == NULL) {
printf("RSA key generation failed!\n");
exit(EXIT_FAILURE);
}
// 生成公钥PEM文件
pubkeybio = BIO_new_file("public.pem", "w+");
if (pubkeybio == NULL) {
printf("Unable to open public key file!\n");
exit(EXIT_FAILURE);
}
PEM_write_bio_RSAPublicKey(pubkeybio, rsa);
BIO_free(pubkeybio);
// 生成私钥PEM文件
prikeybio = BIO_new_file("private.pem", "w+");
if (prikeybio == NULL) {
printf("Unable to open private key file!\n");
exit(EXIT_FAILURE);
}
PEM_write_bio_RSAPrivateKey(prikeybio, rsa, NULL, NULL, 0, NULL, NULL);
BIO_free(prikeybio);
// 加密
encrypted = (unsigned char *)malloc(RSA_size(rsa));
encryptedlen = RSA_public_encrypt(strlen(msg) + 1, msg, encrypted, rsa, RSA_PKCS1_PADDING);
if (encryptedlen == -1) {
printf("Encryption failed!\n");
exit(EXIT_FAILURE);
}
printf("Encrypted message: %s\n", encrypted);
// 解密
decrypted = (unsigned char *)malloc(RSA_size(rsa));
decryptedlen = RSA_private_decrypt(encryptedlen, encrypted, decrypted, rsa, RSA_PKCS1_PADDING);
if (decryptedlen == -1) {
printf("Decryption failed!\n");
exit(EXIT_FAILURE);
}
printf("Decrypted message: %s\n", decrypted);
RSA_free(rsa);
free(encrypted);
free(decrypted);
return 0;
}
```
以上代码使用OpenSSL库实现了RSA密钥对的生成、公钥和私钥的输出、加密和解密操作。在实际使用中,需要根据具体需求进行修改和扩展。
阅读全文