Как использовать шифрование aes256 CBC в Swift? - PullRequest
0 голосов
/ 06 мая 2019

Я работаю над приложением, и после того, как версия для Android готова, я запустил версию для ios, используя swift 5. Я использую функцию в моей версии для Android, желание написано на Java, и с помощью этой функции я делаю шифрование / дешифрование простого текста с использованием алгоритма aes-256-cbc.

  private static byte[] array_concat(final byte[] a, final byte[] b){
   final byte[] c = new byte[a.length + b.length];
   System.arraycopy(a, 0, c, 0, a.length);
   System.arraycopy(b, 0, c, a.length, b.length);
   return c;
}

private static String SECRET = "abcdefghijuklmno0123456789012346";
static String encrypt(String myOwnSalt) throws Exception {
    final byte[] pass = SECRET.getBytes(StandardCharsets.UTF_8);
    final byte[] salt = (new SecureRandom()).generateSeed(8);
    final byte[] inBytes = myOwnSalt.getBytes(StandardCharsets.UTF_8);

    final byte[] passAndSalt = array_concat(pass, salt);
    byte[] hash = new byte[0];
    byte[] keyAndIv = new byte[0];
    for (int i = 0; i < 3 && keyAndIv.length < 48; i++) {
        final byte[] hashData = array_concat(hash, passAndSalt);
        final MessageDigest md = MessageDigest.getInstance("MD5");
        hash = md.digest(hashData);
        keyAndIv = array_concat(keyAndIv, hash);
    }

    final byte[] keyValue = Arrays.copyOfRange(keyAndIv, 0, 32);
    final byte[] iv = Arrays.copyOfRange(keyAndIv, 32, 48);
    final SecretKeySpec key = new SecretKeySpec(keyValue, "AES");

    final Cipher cipher = 
   Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));
    byte[] data = cipher.doFinal(inBytes);
       data = array_concat(array_concat("Salted__".getBytes(StandardCharsets.UTF_8), salt), data);

       return Base64.encode(data);
 }

Мне действительно нужна помощь в том, как я могу сделать то же самое в Swift.

1 Ответ

0 голосов
/ 06 мая 2019

Как насчет использования фреймворка с шифрованием aes256 cbc? https://github.com/krzyzanowskim/CryptoSwift

...