2017-12-14 1 views
0

문자열 입력을 암호화하는이 코드가 있습니다. 만약 내가 다른 장치에 대한 동일한 입력으로 암호화하는 경우 8.1 낮은 다음 동일한 가치를 얻을. 그러나 8.1 장치를 사용하려고하면 완전히 다른 문자열이 나타납니다. 예외가 발생하지 않습니다. KeyGenerator : AES를 사용하여 Android 8.1 암호화 업데이트를 찾았습니다. 어떻게 다른 장치 Os 값이 낮은 8.1 동일한 값을 생성하도록 수정할 수 있습니까?Android Cipher는 Android 8.1에서 암호화합니다.

public static String cryptAESGungHo(String input) 
{ 
    byte[] gh_key = getKeyGungho("gh_key").getBytes(); 
    byte[] gh_iv = getKeyGungho("gh_iv").getBytes(); 
    IvParameterSpec ivSpecs = new IvParameterSpec(gh_iv); 
    byte[] crypted = null; 
    try{ 
     SecretKeySpec skey = new SecretKeySpec(gh_key, "AES"); 
     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
     cipher.init(Cipher.ENCRYPT_MODE, skey, ivSpecs); 
     try 
     { 
    crypted = cipher.doFinal(input.getBytes("UTF-16")); 
     } 
     catch(Exception e) 
     {} 
    }catch(Exception e){ 
    } 
    String cr= new String(crypted); 
    return cr; 
} 
+0

암호 해독에 128 또는 256 비트를 사용하고 있습니까? 1.1.3으로 업데이트하고 구현을 변경하여 256 비트를 사용하여 암호화 한 후 아무 문제없이 해독 할 수있었습니다. OS가 아니라 라이브러리에 문제가있는 것으로 보입니다. – Dilip

+0

128 비트를 사용합니다. 난 여전히 해독 할 수있어. 그러나 문자열 반환은 다른 OS –

+0

과 동일하지 않으므로 256 비트로 변경하고 다시 시도해보십시오. – Dilip

답변

0

UTF-16로 변경하려고 UTF-16LE 또는 UTF-16BE을 확인하시기 바랍니다

crypted = cipher.doFinal(input.getBytes("UTF-16LE")); 

당신은

byte[] data = str.getBytes("UTF-16LE"); 
Log.i("api", Arrays.toString(data)); 

다른 안드로이드 OS와 동일합니다 여부를 안드로이드 8.1.0에서 암호 입력을 확인하기 위해 사용할 수 있습니다.

+0

UTF-16LE로 작업하고 있습니다. 고맙습니다. –

0

이 줄을 변경하고

에서

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 

으로

Cipher cipher = Cipher.getInstance("AES"); 
+0

계속됩니다. OS 8.1 이하에서는 다른 값을 반환합니다. @@ –

+0

당신은이 URL을 생각해 볼 수 있습니다. https://stackoverflow.com/questions/6788018/android-encryption-decryption-with-aes –