Android RSA 公钥加密
在安卓开发中,数据的安全性是非常重要的。一种常见的保护数据的方式是使用非对称加密算法,其中 RSA 是最常用的一个算法。本文将介绍如何在 Android 中使用 RSA 公钥加密数据,并提供相应的代码示例。
什么是 RSA 加密
RSA 是一种非对称加密算法,它使用一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。由于公钥可以公开,因此任何人都可以使用公钥加密数据。而只有持有私钥的人才能解密这些数据。
RSA 加密的原理是基于大数分解的难题。其核心思想是选择两个大素数 p 和 q,然后计算 n = p * q。再选择一个与 (p-1)*(q-1) 互质的整数 e,作为公钥的一部分。然后,根据 e 和 n 计算出 d,作为私钥的一部分。公钥是 (e, n),私钥是 (d, n)。
加密时,将明文 m 经过公式 c = m^e mod n 计算得到密文 c。解密时,将密文 c 经过公式 m = c^d mod n 计算得到明文 m。
在 Android 中使用 RSA 加密
在 Android 中使用 RSA 加密数据需要以下步骤:
- 生成密钥对:使用
KeyPairGenerator
类生成一对公钥和私钥。示例代码如下:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // 设置密钥长度
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
- 加密数据:使用公钥对数据进行加密。示例代码如下:
String data = "Hello, RSA!";
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal(data.getBytes());
- 解密数据:使用私钥对加密后的数据进行解密。示例代码如下:
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
String decryptedString = new String(decryptedData);
示例代码
以下是一个完整的示例代码,演示了如何在 Android 中使用 RSA 公钥加密数据:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
public class RSACryptor {
private PublicKey publicKey;
private PrivateKey privateKey;
public RSACryptor() {
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
publicKey = keyPair.getPublic();
privateKey = keyPair.getPrivate();
} catch (Exception e) {
e.printStackTrace();
}
}
public byte[] encrypt(String data) {
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(data.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String decrypt(byte[] encryptedData) {
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
return new String(decryptedData);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
序列图
下面是使用 Mermaid 语法绘制的 RSA 加密的序列图:
sequenceDiagram
participant Android
participant Server
Android->>Server: 生成密钥对
Server-->>Android: 返回公钥和私钥
Android->>Server: 加密数据
Server-->>Android: 返回加密后的数据
Android->>Server: 解密数据
Server-->>Android: 返回解密后的数据
总结
本文介绍了在 Android 中使用 RSA 公钥