Метод шифрования Java:
Код: Выделить всё
public static String javaEncrypt(String publicKey, String plaintext) throws Exception {
Cipher c = Cipher.getInstance("RSA/ECB/OAEPPadding");
byte[] publicBytes = Base64.decode(publicKey, Base64.DEFAULT);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);
c.init(Cipher.ENCRYPT_MODE, pubKey, new OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT));
byte[] data = plaintext.getBytes();
byte[] encVal = c.doFinal(data);
return Base64.encodeToString(encVal, Base64.NO_WRAP);
}
Код: Выделить всё
func swiftEncrypt(publicKey: String, plaintext: String) throws -> String {
guard let publicKeyData = Data(base64Encoded: publicKey) else {
return ""
}
// Extract the SecKey from the provided public key data
let keyDict: [CFString : Any] = [
kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeyClass: kSecAttrKeyClassPublic,
kSecAttrKeySizeInBits: 2048
] as [CFString : Any]
var error: Unmanaged? = nil
guard let secKey = SecKeyCreateWithData(publicKeyData as CFData, keyDict as CFDictionary, &error) else {
throw EncryptionError.invalidPublicKey
}
// Convert the plaintext to Data
guard let plaintextData = plaintext.data(using: .utf8) else {
throw EncryptionError.invalidPlaintext
}
// Define the encryption algorithm (RSA-OAEP with SHA-256)
let algorithm = SecKeyAlgorithm.rsaEncryptionOAEPSHA256
// Encrypt the data
guard let encryptedData = SecKeyCreateEncryptedData(secKey, algorithm, plaintextData as CFData, &error) as Data? else {
throw error!.takeRetainedValue() as Error
}
// Convert encrypted data to base64 string
return encryptedData.base64EncodedString(options: [])
}
Пример открытого ключа: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwFcXI8yS1CGoHNU6a3e/Ie/qMmrje64VktoJ/hAGtOuP+6bF3YUMQHKaDC6 m38+ SDACA7jmHuqxoxR+wsvTaqYnjGdkes5HQiY9o7af0oo3btyes70Q34Og6gnTKTep/feNN/lmY+VQ2A65qAMrCRw/oNA9HlVZqI1DnZqRSFMUEdMpfot6a90zxBxdR7qKus4ta8xcyaq 4XFgZTE durPq1GZ2haSNtsRklLjijYtQYXR20ObTvDOfRCNiwHbgK9UGnaeCGm +0dzhZ4SCm/TW3MIEspjMSiVFxTAR0wMTEPRgBOV5Sz/vNx1ZAelgui/Q4f9F3CFQ7n8ZwKI8Jf9DQIDAQAB
ожидаемые зашифрованные данные:
WpWaFf51GZaS5Jc84cDxCZhUI0y/ByPOGjS4sD или nsctwSeKK2eo1NDvxhv9p56illILYRwLJad7p8zeQSvkknwxolL2GSPA9QYnjnqXr2B9YZcHX 5Tvrglmso7Prg==
Подробнее здесь: https://stackoverflow.com/questions/788 ... a-to-swift
Мобильная версия