Есть ли метод шифрования, как в Java, в Swift? - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь сделать расшифровку, но я действительно не знаю, как обычная криптография работает на Swift. У меня есть этот код в Java, и я должен конвертировать в Swift, но я не добился успеха

Я использую Swift 4.2 и Java 8

Эта функция работает в Java

private static final String CIPHER_NAME = "DESede";
private static final String ALGORITHM = "MD5";
private static final String SECRET_KEY = "p3tr1c0r";
public static String decrypt(String encryptedText) {
 String base64EncryptedString;
 try{
    byte[] message = Base64.decodeBase64(encryptedText.getBytes(StandardCharsets.UTF_8.name()));
    MessageDigest md = MessageDigest.getInstance(ALGORITHM);
    byte[] digestOfPassword = md.digest(SECRET_KEY.getBytes(StandardCharsets.UTF_8.name()));
    byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
    SecretKey key = new SecretKeySpec(keyBytes, CIPHER_NAME);

    Cipher decipher = Cipher.getInstance(CIPHER_NAME);
    decipher.init(Cipher.DECRYPT_MODE, key);

    byte[] plainText = decipher.doFinal(message);

    base64EncryptedString = new String(plainText, StandardCharsets.UTF_8.name());
}catch (UnsupportedEncodingException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException ex){
    log.warn("Exception while trying to decrypt,  using encryptedText ");
    base64EncryptedString = encryptedText;
 }
return encryptedText;
}

На данный момент у меня есть этот код для дайджеста md5, я знаю, как я могу конвертировать в base 64 и наоборот, моя проблема в том, когда я хочу конвертировать байты, в java, если я вижу журнал, байты отрицательны, но в быстром являются байты без знака, это то же самое? а у меня другая проблема cipherDesede, есть что-то похожее на swift?

let str = "61880868013"
let buf: [UInt8] = Array(str.utf8)

func MD5(string: String) -> Data {
  let messageData = string.data(using:.utf8)!
  var digestData = Data(count: Int(CC_MD5_DIGEST_LENGTH))

_ = digestData.withUnsafeMutableBytes {digestBytes in
    messageData.withUnsafeBytes {messageBytes in
        CC_MD5(messageBytes, CC_LONG(messageData.count), digestBytes)
    }
  }
return digestData
}

в Java ввод: uoqrHNWzb4XMQZoTQSGsHQ ==

на выходе 61880868013

1 Ответ

1 голос
/ 03 апреля 2019

в Java, если я вижу журнал, байты отрицательны, но в swift это байты без знака, это тоже самое?

Да, они одинаковы. Биты просто интерпретируются по-разному, но для криптографии - или кодирования / декодирования символов - имеют значение только сами значения битов.

И другая моя проблема - шифр DES-EDE, есть что-то похожее на Swift?

Swift, по-видимому, не выполняет слишком много криптовалют, но вы можете просто найти любую реализацию, которая выполняет: тройную DES / TDES / TDEA / 3DES или действительно DES-EDE (все они одинаковы) в режиме ECB с PKCS # 5 или PKCS # 7 (также то же самое для тройного DES).

Одна ссылка показывает этот пример, который использует CCCrypt под , где он, кажется, называется заполнением 3DES, ECB и PKCS # 7, по-видимому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...