Невозможно расшифровать данные, которые были зашифрованы с использованием SecureRandom - PullRequest
0 голосов
/ 04 октября 2018

Я использовал этот сегмент кода для шифрования данных моего изображения 2 года назад.В то время мой целевой SDK был 22. Но когда я пытаюсь обновить свой SDK, я сталкиваюсь с тем, что не могу расшифровать его.Я обнаружил, что Android устарел этот метод шифрования.Есть ли способ решить эту проблему, чтобы я мог расшифровать мои изображения.Заранее спасибо.

public byte[] EncryptByte(byte[] rawInputByte){        

    byte[] fileBytes = null;
    try {
        byte[] yourKey = generateKey("password");
        fileBytes = encodeFile(yourKey, rawInputByte);

    } catch (Exception e) {
        e.printStackTrace();            
    }

    return fileBytes;
}

public byte[] generateKey(String password) throws Exception
{
    byte[] keyStart = password.getBytes("UTF-8");

    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
    sr.setSeed(keyStart);
    kgen.init(128, sr);
    SecretKey skey = kgen.generateKey();
    return skey.getEncoded();
}

1 Ответ

0 голосов
/ 04 октября 2018

Наконец я могу решить это.Спасибо Джеймс К. Полк за предоставленную мне ссылку.Мой сегмент кода указан ниже, а ссылка InsecureSHA1PRNGKeyDerivator - this .Надеюсь, это поможет вам, ребята.

public byte[] decodeFile(byte[] fileData) throws Exception
{     
    SecretKey insecureKey = deriveKeyInsecurely("password", 16);
    byte[] decryptedData = decryptData(fileData, insecureKey);

    return decryptedData;
}

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
private static SecretKey deriveKeyInsecurely(String password, int
        keySizeInBytes) throws Exception {
    byte[] passwordBytes = password.getBytes(StandardCharsets.US_ASCII);
    return new SecretKeySpec( InsecureSHA1PRNGKeyDerivator.deriveInsecureKey(  passwordBytes, keySizeInBytes),  "AES");
}


private static byte[] decryptData(
        byte[] data, SecretKey key) {
    try {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, key );

        return cipher.doFinal(data);
    } catch (GeneralSecurityException e) {
        throw new RuntimeException("This is unconceivable!", e);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...