Мне нужно расшифровать текст AES-256 от Java до IOS SWIFT - PullRequest
0 голосов
/ 24 октября 2019

У меня есть соль, iv и пароль, который индивидуально хешируется с использованием md5.

например: let md5Text = md5("password"). То же самое для соли и IV.

Тогда ключ будет сгенерирован с использованием соли и пароля md5. Этот сгенерированный ключ создается с использованием алгоритма HMACSHA1, обеспечивая 1024 итерации (раундов) и длину ключа 256.

Сгенерированный ключ и md5 iv затем используются для шифрования простого текста.

Я могу сгенерировать ключ и зашифровать и расшифровать в моем конце (iOS). Но когда мне удастся расшифровать зашифрованный текст из Java, я не получу ожидаемого результата.

Может ли кто-нибудь помочь мне преобразовать логику завершения JAVA для ее реализации в iOS swift 4.3 для шифрования aes 256?

Пожалуйста, найдите образец кода Java ниже:

public class MD5
{    
    public static String getHash1(String s) { 

        try { 

            // Create MD5 Hash 
            MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); 
            digest.update(s.getBytes()); 
            byte messageDigest[] = digest.digest();

            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            for (int i=0; i<messageDigest.length; i++) {
                String hex = Integer.toHexString(0xFF & messageDigest[i]);
                            while (hex.length() < 2) {
                                hex = "0" + hex;
                             }
                    hexString.append(hex);
                        }
            return hexString.toString();

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";

    }


public static String encryptedToAes(String password, String salt, int iterations, int keyLength) throws NoSuchAlgorithmException, InvalidKeySpecException {
    char[] chars = password.toCharArray();

    PBEKeySpec spec = new PBEKeySpec(chars, salt.getBytes(), 1024, 256);
    SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
   SecreteKey tmp = skf.generateSecrete(spec)
SecreteKey secrete = new SecreteKeySpec(tmp.getEncoded(), "AES");

byte[] iv_bytes = toBin(iv);
IvParameterSpec ivspec = new IvParameterSpec(iv_bytes);

Cipher.getInstance("AES/ECB/PKCS5Padding");
   cipher.init(Cipher.ENCRYPT_MODE, secret, ivspec);
byte[] encryptedText = cipher.doFinal(plainText.getBytes())

    return toHex(encryptedText);
}

// Converts byte array to a hexadecimal string
private static byte[] toHex(String str) {
    int length = str.length() / 2;
    byte[] buffer = new byte[length];
    for (int i = 0; i < array.length; i++) {
        buffer[i] = (byte) Integer.parseInt(str.subString(i*2, i*2+2), 16);
    }
    return buffer;
}

private static String toBin(byte[] array) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < array.length; i++) {
        sb.append(Integer.toString((array[i] & 0xff) + 0x100, 16).substring(1));
    }
    return sb.toString();
}


private string pass = getHash1("Password")
private string salt = getHash1("Salt")
private string iv = getHash1("IV")

encryptedToAes(pass, salt, 1024, 256)
PlainText = "TEST" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...