rsa的介绍(略过);
1、通过函数生成公私钥来完成加解密过程;
int DeEncrypto()
{
RSA* key;
char msg[]="888888";
char msg2[256];
char msg3[256];
int r;
puts("genrsa...(maybe a few seconds)");
key = RSA_generate_key(128, 65537, NULL, NULL);
puts("ok");
int i;
for(i = 0; i < 5; i++)
{
r = RSA_public_encrypt(strlen(msg), msg, msg2, key, RSA_PKCS1_PADDING); // or RSA_PKCS1_OAEP_PADDING
if (!r)
puts("error in enc");
printf("len = %d; encrypt:%s\n", strlen(msg2), msg2);
r = RSA_private_decrypt(r, msg2, msg3, key, RSA_PKCS1_PADDING);
if (!r)
puts("error in dec");
if (memcmp(msg, msg3, strlen(msg)))
puts("ERROR! text2 != text");
else
{
msg3[strlen(msg)] = 0;
printf("解密后的明文:%s\n", msg3);
}
puts("is there errs? no? ok!\n\n");
}
2、通过文件获得公私钥来完成加解密
int DeEncrypto()
{
#define RSA_KEY_FILE "rsakey.txt"
// > openssl genrsa -out rsakey.txt 1024
RSA* key;
char msg[]="888888";
char msg2[256];
char msg3[256];
int r;
key = RSA_new();
FILE *fp = fopen(RSA_KEY_FILE, "r");
key = PEM_read_RSAPrivateKey(fp, &key, NULL, NULL);
int i;
for(i = 0; i < 5; i++)
{
r = RSA_public_encrypt(strlen(msg), msg, msg2, key, RSA_PKCS1_PADDING); // or RSA_PKCS1_OAEP_PADDING
if (!r)
puts("error in enc");
printf("len = %d; encrypt:%s\n", strlen(msg2), msg2);
r = RSA_private_decrypt(r, msg2, msg3, key, RSA_PKCS1_PADDING);
if (!r)
puts("error in dec");
if (memcmp(msg, msg3, strlen(msg)))
puts("ERROR! text2 != text");
else
{
msg3[strlen(msg)] = 0;
printf("解密后的明文:%s\n", msg3);
}
puts("is there errs? no? ok!\n\n");
}