Java和C語言都可以用于RSA算法的實(shí)現(xiàn),這是因?yàn)镽SA算法本身是一個(gè)數(shù)學(xué)算法,與編程語言無關(guān)。在Java中,我們可以使用javax.crypto包中的RSA類實(shí)現(xiàn)RSA加密解密。而在C語言中,可以使用OpenSSL庫中的RSA算法實(shí)現(xiàn)。
// Java中使用RSA類進(jìn)行加密 import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import javax.crypto.Cipher; public class RSAEncryption { public static void main(String[] args) throws Exception { String plainText = "Hello World!"; // Generate key pair KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(2048); KeyPair keyPair = keyGen.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); // Encrypt data Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] cipherText = cipher.doFinal(plainText.getBytes()); System.out.println("Cipher Text: " + new String(cipherText, "UTF8")); // Decrypt data cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] plainTextBytes = cipher.doFinal(cipherText); System.out.println("Plain Text: " + new String(plainTextBytes, "UTF8")); } }
上面的Java代碼示例中,我們生成了一個(gè)2048位長度的RSA密鑰對(duì),使用公鑰加密了一個(gè)字符串,然后使用私鑰解密回來。其中,我們使用了RSA/ECB/PKCS1Padding加密方式,這是一種常用的RSA加密方式。
// C語言中使用OpenSSL庫實(shí)現(xiàn)RSA加密 #include#include #include int main() { char plainText[] = "Hello World!"; RSA *keyPair; // Generate key pair keyPair = RSA_generate_key(2048, RSA_F4, NULL, NULL); // Encrypt data unsigned char cipherText[RSA_size(keyPair)]; int cipherLen = RSA_public_encrypt(strlen(plainText), plainText, cipherText, keyPair, RSA_PKCS1_PADDING); printf("Cipher Text: %s\n", cipherText); // Decrypt data unsigned char plainTextBytes[strlen(plainText)]; int plainLen = RSA_private_decrypt(cipherLen, cipherText, plainTextBytes, keyPair, RSA_PKCS1_PADDING); printf("Plain Text: %s\n", plainTextBytes); RSA_free(keyPair); return 0; }
上面的C語言代碼示例中,我們同樣生成了一個(gè)2048位長度的RSA密鑰對(duì),使用公鑰加密了一個(gè)字符串,然后使用私鑰解密回來。其中,我們使用了RSA_PKCS1_PADDING填充方式。