Преобразование шифрования RSA из Java в SwiftJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Преобразование шифрования RSA из Java в Swift

Сообщение Anonymous »

Я пытаюсь преобразовать метод шифрования RSA из Java в Swift. Метод Java работает правильно, но моя реализация Swift не дает ожидаемых результатов. Может ли кто-нибудь помочь мне определить, что я делаю неправильно? (RSA/OAEP(SHA256)/MGF-1(SHA-1)PKCS#11)
Метод шифрования 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: [])
}
Пример открытого текста: ijyV5XvaOHDt1nkc
Пример открытого ключа: 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»