最佳答案
引言
隨着信息技巧的飛速開展,數據保險已成為社會關注的核心。C言語作為一種基本且富強的編程言語,在實現加密算法方面有着廣泛的利用。本文將帶領讀者從入門到實戰,深刻懂得C言語加密技巧,解鎖編程保險技能。
一、C言語加密基本
1.1 加密算法分類
加密算法重要分為兩大年夜類:對稱加密算法跟非對稱加密算法。
- 對稱加密算法:利用雷同的密鑰停止加密跟解密,如AES、DES等。
- 非對稱加密算法:利用一對密鑰,一個用於加密,另一個用於解密,如RSA、ECC等。
1.2 加密道理
加密的基本道理是將明文經由過程加密算法跟密鑰轉換成密文,解密則是將密文經由過程解密算法跟密鑰轉換回明文。
二、C言語加密實戰
2.1 對稱加密算法
以下是一個利用AES算法停止加密跟解密的C言語示例:
#include <stdio.h>
#include <openssl/aes.h>
#include <string.h>
void AES_encrypt(const unsigned char *plaintext, unsigned char *ciphertext, const unsigned char *key) {
AES_KEY aes_key;
AES_set_encrypt_key(key, 128, &aes_key);
AES_cbc_encrypt(plaintext, ciphertext, strlen((char *)plaintext), &aes_key, NULL, AES_ENCRYPT);
}
void AES_decrypt(const unsigned char *ciphertext, unsigned char *plaintext, const unsigned char *key) {
AES_KEY aes_key;
AES_set_decrypt_key(key, 128, &aes_key);
AES_cbc_encrypt(ciphertext, plaintext, strlen((char *)ciphertext), &aes_key, NULL, AES_DECRYPT);
}
int main() {
const unsigned char key[] = "1234567890123456";
const unsigned char plaintext[] = "Hello, World!";
unsigned char ciphertext[1024], decryptedtext[1024];
AES_encrypt(plaintext, ciphertext, key);
printf("Ciphertext: %s\n", ciphertext);
AES_decrypt(ciphertext, decryptedtext, key);
printf("Decrypted text: %s\n", decryptedtext);
return 0;
}
2.2 非對稱加密算法
以下是一個利用RSA算法停止加密跟解密的C言語示例:
#include <stdio.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
void RSA_encrypt(const unsigned char *plaintext, unsigned char *ciphertext, RSA *rsa) {
int ciphertext_len = RSA_size(rsa);
int ret = RSA_public_encrypt(strlen((char *)plaintext), plaintext, ciphertext, rsa, RSA_PKCS1_PADDING);
if (ret < 0) {
fprintf(stderr, "RSA encryption failed\n");
return;
}
}
void RSA_decrypt(const unsigned char *ciphertext, unsigned char *decryptedtext, RSA *rsa) {
int decryptedtext_len = RSA_size(rsa);
int ret = RSA_private_decrypt(ciphertext_len, ciphertext, decryptedtext, rsa, RSA_PKCS1_PADDING);
if (ret < 0) {
fprintf(stderr, "RSA decryption failed\n");
return;
}
}
int main() {
FILE *pubkey = fopen("public.pem", "rb");
FILE *privkey = fopen("private.pem", "rb");
RSA *rsa = RSA_new();
unsigned char *plaintext = "Hello, World!";
unsigned char *encryptedtext = NULL;
unsigned char *decryptedtext = NULL;
long encryptedtext_len;
long decryptedtext_len;
if (pubkey == NULL || privkey == NULL) {
fprintf(stderr, "Error opening key files\n");
return 1;
}
rsa = PEM_read_RSAPublicKey(pubkey, rsa, NULL, NULL);
encryptedtext = (unsigned char *)malloc(RSA_size(rsa));
RSA_encrypt(plaintext, encryptedtext, rsa);
encryptedtext_len = RSA_size(rsa);
printf("Encrypted text: ");
for (int i = 0; i < encryptedtext_len; i++) {
printf("%02x", encryptedtext[i]);
}
printf("\n");
rsa = PEM_read_RSAPrivateKey(privkey, rsa, NULL, NULL);
decryptedtext = (unsigned char *)malloc(strlen((char *)plaintext) + 1);
RSA_decrypt(encryptedtext, decryptedtext, rsa);
decryptedtext_len = RSA_size(rsa);
printf("Decrypted text: %s\n", decryptedtext);
RSA_free(rsa);
fclose(pubkey);
fclose(privkey);
free(encryptedtext);
free(decryptedtext);
return 0;
}
三、總結
本文從C言語加密基本到實戰,具體介紹了C言語加密技巧。讀者經由過程進修本文,可能控制C言語加密的基本道理跟常用算法,為在現實項目中利用加密技巧打下基本。在編程過程中,器重數據保險,進步編程保險技能,獨特保護收集情況的保險與牢固。