2017-10-12 43 views
0

我是Android中的文本文件加密中的新功能。並嘗試了很多文本加密的例子,但我很困惑如何申請。 我有來自json響應的5個字符串記錄,我想將它們保存在文本文件(外部存儲)和「加密格式」中。我試過了cipher_text_encoding的代碼,但是它真的和很多類混淆了。 請建議我爲文本加密好教程或給我提示如何編碼。 在此先感謝。加密並保存在外部存儲中作爲文本文件的Json的字符串響應

回答

0

加密和解密使用AES私鑰算法

產生AES的密鑰:

public static byte[] generateAesSecretKey(){ 
    String SALT2 = "strong_salt_value"; 
    String username = "user_name"; 
    String password = "strong_password"; 
    byte[] key = (SALT2 + username + password).getBytes(); 
    SecretKey secretKeySpec = null; 

    try { 
     MessageDigest sha = MessageDigest.getInstance("SHA-1"); 
     key = sha.digest(key); 
     key = Arrays.copyOf(key, 16); 
     secretKeySpec = new SecretKeySpec(key, "AES"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return secretKeySpec.getEncoded(); 
} 

加密:

public static byte[] encodeFile(byte[] secretKey, byte[] fileData) { 
    SecretKeySpec skeySpec = new SecretKeySpec(secretKey, "AES"); 
    byte[] encrypted = null; 
    try { 
     Cipher cipher = Cipher.getInstance("AES"); 
     cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 
     encrypted = cipher.doFinal(fileData); 

     // Now write your logic to save encrypted data to sdcard here 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } catch (NoSuchPaddingException e) { 
     e.printStackTrace(); 
    } catch (InvalidKeyException e) { 
     e.printStackTrace(); 
    } catch (IllegalBlockSizeException e) { 
     e.printStackTrace(); 
    } catch (BadPaddingException e) { 
     e.printStackTrace(); 
    } catch (Exception e){ 
     e.printStackTrace(); 
    } 
    return encrypted; 
} 

解密:

public static byte[] decodeFile(byte[] key, byte[] fileData) { 
    SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); 
    byte[] decrypted = null; 
    try { 
     Cipher cipher = Cipher.getInstance("AES"); 
     cipher.init(Cipher.DECRYPT_MODE, skeySpec); 
     decrypted = cipher.doFinal(fileData); 
    } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (InvalidKeyException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalBlockSizeException | BadPaddingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch(Exception e){ 
     // for all other exception 
     e.printStackTrace(); 
    } 
    return decrypted; 
} 

希望以上方法對你有用!

+0

謝謝你soo多@zeeali,讓我試試你的代碼。 – nidhi

+0

歡迎您!你可以接受我的答案,如果它可以幫助你! – zeeali

0

因爲每個初學者都會感到困惑,而不是自己動手,一切都學會利用代碼重用或書面共享庫。這將利用代碼抽象,因爲您只對JSON/Sting的加密和解密感興趣。

對於一個完整的文件:

對於可重複使用的(爪哇/ Android的)庫:

簡體le用法:

String plainText = "Your String"; 
String encryptionKey = "Your Encryption Key"; 
String IV = "Your Initial Vector"; 

// To Encrypt 
String cipherText = AES.encrypt(plainText, encryptionKey, IV); 

// To Decrypt returned value same as plainText 
String originalText = AES.decrypt(cipherText, encryptionKey, IV); 

乾杯。

+0

謝謝@ Al-Kathiri Khalid和yess它真的讓我感到困惑,我會嘗試你的鏈接。 – nidhi

+0

很高興我可以幫助,如果你發現我的回答有幫助和相關,請接受它,以便對他人也有幫助。 –

+0

絕對,再次感謝。 – nidhi

相關問題