写出android中进行rsa加密的代码
时间: 2023-03-13 16:19:52 浏览: 72
以下是实现RSA加密的Android代码:// Generate an RSA keyKeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.genKeyPair();// Get the public and private keysPublicKey publicKey = kp.getPublic();
PrivateKey privateKey = kp.getPrivate();// Encrypt a messageCipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal("Hello world".getBytes());// Decrypt the messagecipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
String decryptedString = new String(decryptedBytes);
相关问题
写出android中进行rsa加密与解密的代码
下面是Android中用于RSA加密和解密的代码:// 加密
PrivateKey privatekey = keyPair.getPrivate();
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, privatekey);
byte[] cipherData = cipher.doFinal(plainData);// 解密
PublicKey publickey = keyPair.getPublic();
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, publickey);
byte[] plainData = cipher.doFinal(cipherData);
用C语言写出RSA加密的代码
以下是用C语言实现RSA加密算法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <math.h>
#define PRIME_MAX 100 // 素数表的上限
#define MAX 10000 // 随机数表的上限
/* 求取两个数的最大公约数 */
int gcd(int a, int b)
{
int remainder;
while(b > 0)
{
remainder = a % b;
a = b;
b = remainder;
}
return a;
}
/* 判断一个数是否为素数 */
int isPrime(int num)
{
int i;
if(num == 2)
return 1;
if(num % 2 == 0)
return 0;
for(i = 3; i <= sqrt(num); i += 2)
{
if(num % i == 0)
return 0;
}
return 1;
}
/* 生成随机的大素数 */
int generatePrime(int seed)
{
int prime, i;
srand(seed);
do
{
prime = rand() % PRIME_MAX + 1;
} while (!isPrime(prime));
return prime;
}
/* 用扩展欧几里得算法计算乘法逆元 */
int gcdExtended(int a, int b, int* x, int* y)
{
if(b == 0)
{
*x = 1;
*y = 0;
return a;
}
int x1, y1;
int gcd = gcdExtended(b, a % b, &x1, &y1);
*x = y1;
*y = x1 - a / b * y1;
return gcd;
}
/* 生成RSA加密算法所需的公钥和私钥 */
void generateKey(int seed, int* N, int* e, int* d)
{
int p, q, fn, x, y;
do
{
p = generatePrime(seed);
q = generatePrime(seed + 1);
} while (p == q);
*N = p * q;
fn = (p - 1) * (q - 1);
srand(time(NULL));
do
{
*e = rand() % (fn - 2) + 2;
} while (gcd(*e, fn) != 1);
gcdExtended(*e, fn, &x, &y);
*d = x;
if(*d < 0)
*d += fn;
}
/* 将明文转换为数字 */
void textToNumber(char* text, int* num)
{
int i;
for(i = 0; i < strlen(text); i++)
{
num[i] = text[i] - 'a' + 1;
}
}
/* 将数字转换为明文 */
void numberToText(int* num, int n, char* text)
{
int i;
for(i = 0; i < n; i++)
{
text[i] = num[i] + 'a' - 1;
}
text[i] = '\0';
}
/* 加密函数 */
int* encrypt(int* num, int n, int N, int e)
{
int i;
int* result = (int*)malloc(sizeof(int) * n);
for(i = 0; i < n; i++)
{
result[i] = (int)pow(num[i], e) % N;
}
return result;
}
/* 解密函数 */
int* decrypt(int* num, int n, int N, int d)
{
int i;
int* result = (int*)malloc(sizeof(int) * n);
for(i = 0; i < n; i++)
{
result[i] = (int)pow(num[i], d) % N;
}
return result;
}
/* 输出数字 */
void printNumber(int* num, int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%d ", num[i]);
}
printf("\n");
}
int main()
{
int seed = time(NULL);
int N, e, d;
int num[MAX];
char text[MAX];
int* encrypted;
int* decrypted;
int i, n;
/* 生成公钥和私钥 */
generateKey(seed, &N, &e, &d);
printf("Public key: (%d, %d)\n", N, e);
printf("Private key: (%d, %d)\n", N, d);
/* 输入明文 */
printf("Input the plaintext: ");
scanf("%s", text);
n = strlen(text);
textToNumber(text, num);
/* 加密 */
encrypted = encrypt(num, n, N, e);
printf("Encrypted text: ");
printNumber(encrypted, n);
/* 解密 */
decrypted = decrypt(encrypted, n, N, d);
printf("Decrypted text: ");
numberToText(decrypted, n, text);
printf("%s\n", text);
/* 释放内存 */
free(encrypted);
free(decrypted);
return 0;
}
```