1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
import javax.crypto.Cipher import javax.crypto.KeyGenerator import javax.crypto.SecretKey import javax.crypto.spec.SecretKeySpec import java.security.KeyFactory import java.security.KeyPair import java.security.KeyPairGenerator import java.security.PrivateKey import java.security.PublicKey import java.security.spec.PKCS8EncodedKeySpec import java.security.spec.X509EncodedKeySpec fun main() { val message = "Hola, mundo!" // Mensaje a cifrar // Generar la clave secreta AES val secretKey = generateSecretKey() // Generar el par de claves pública y privada RSA val keyPair = generateRSAKeyPair() // Obtener la clave pública y privada en formato de bytes val publicKeyBytes = keyPair.public.encoded val privateKeyBytes = keyPair.private.encoded // Cifrar la clave secreta con la clave pública RSA val encryptedKey = encryptWithRSA(secretKey.encoded, publicKeyBytes) // Descifrar la clave secreta con la clave privada RSA val decryptedKey = decryptWithRSA(encryptedKey, privateKeyBytes) // Cifrar el mensaje con la clave secreta AES val encryptedMessage = encryptWithAES(message, decryptedKey) // Descifrar el mensaje con la clave secreta AES val decryptedMessage = decryptWithAES(encryptedMessage, decryptedKey) println("Mensaje original: $message") println("Mensaje cifrado: $encryptedMessage") println("Mensaje descifrado: $decryptedMessage") } // Generar una clave secreta AES fun generateSecretKey(): SecretKey { val keyGenerator = KeyGenerator.getInstance("AES") keyGenerator.init(256) // Tamaño de la clave AES return keyGenerator.generateKey() } // Generar un par de claves RSA fun generateRSAKeyPair(): KeyPair { val keyPairGenerator = KeyPairGenerator.getInstance("RSA") keyPairGenerator.initialize(2048) // Tamaño de la clave RSA return keyPairGenerator.generateKeyPair() } // Cifrar datos con la clave pública RSA fun encryptWithRSA(data: ByteArray, publicKeyBytes: ByteArray): ByteArray { val publicKeySpec = X509EncodedKeySpec(publicKeyBytes) val keyFactory = KeyFactory.getInstance("RSA") val publicKey: PublicKey = keyFactory.generatePublic(publicKeySpec) val cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") cipher.init(Cipher.ENCRYPT_MODE, publicKey) return cipher.doFinal(data) } // Descifrar datos con la clave privada RSA fun decryptWithRSA(encryptedData: ByteArray, privateKeyBytes: ByteArray): ByteArray { val privateKeySpec = PKCS8EncodedKeySpec(privateKeyBytes) val keyFactory = KeyFactory.getInstance("RSA") val privateKey: PrivateKey = keyFactory.generatePrivate(privateKeySpec) val cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") cipher.init(Cipher.DECRYPT_MODE, privateKey) return cipher.doFinal(encryptedData) } // Cifrar datos con la clave secreta AES fun encryptWithAES(data: String, secretKey: ByteArray): ByteArray { val secretKeySpec = SecretKeySpec(secretKey, "AES") val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding") cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec) return cipher.doFinal(data.toByteArray()) } // Descifrar datos con la clave secreta AES fun decryptWithAES(encryptedData: ByteArray, secretKey: ByteArray): String { val secretKeySpec = SecretKeySpec(secretKey, "AES") val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding") cipher.init(Cipher.DECRYPT_MODE, secretKeySpec) val decryptedBytes = cipher.doFinal(encryptedData) return String(decryptedBytes) } |