C言語でRSA暗号アルゴリズムを実装する方法は何ですか?
以下は、RSA暗号化アルゴリズムを実装した簡単なC言語のサンプルコードです。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
int is_prime(int n) {
if (n <= 1)
return 0;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0)
return 0;
}
return 1;
}
int generate_prime() {
int p;
do {
p = rand() % 100 + 1;
} while (!is_prime(p));
return p;
}
int mod_exp(int base, int exp, int mod) {
int result = 1;
while (exp > 0) {
if (exp % 2 == 1)
result = (result * base) % mod;
base = (base * base) % mod;
exp /= 2;
}
return result;
}
int main() {
int p = generate_prime();
int q = generate_prime();
int n = p * q;
int phi = (p - 1) * (q - 1);
int e = 2;
while (gcd(e, phi) != 1) {
e++;
}
int d = 1;
while ((d * e) % phi != 1) {
d++;
}
printf("Public key: (%d, %d)\n", e, n);
printf("Private key: (%d, %d)\n", d, n);
int plaintext = 123;
int ciphertext = mod_exp(plaintext, e, n);
printf("Encrypted message: %d\n", ciphertext);
int decrypted_text = mod_exp(ciphertext, d, n);
printf("Decrypted message: %d\n", decrypted_text);
return 0;
}
このコードは、2つのランダムな素数pとqを生成し、nとphiの値を計算し、公開鍵eと秘密鍵dを選択し、その後、公開鍵を使用して平文を暗号化し、秘密鍵を使用して暗号文を復号化します。なお、ここでの暗号化と復号化は例示のために行われており、実際のアプリケーションではより大きな素数と複雑な操作が必要です。