簡體   English   中英

使用AES-256 Java加密

[英]Encryption with AES-256 Java

我有這個簡單的代碼,我在互聯網上找到..我正在學習這個加密/解密的東西..這段代碼似乎工作正常,但我不明白的東西......為什么在“c.doFinal()之后“(用於使用AES-256加密/解密)這個人使用BASE64編碼/解碼該加密值? 僅使用AES還不夠?

`private static final String ALGO = "AES";
 private static final byte[] keyValue = 
 new byte[] { 'T', 'h', 'e', 'B', 'e', 's', 't', 'S', 'e', 'c', 'r','e', 't', 'K', 'e', 'y' };


 public static String encrypt(String Data) throws Exception {
    Key key = generateKey();
    Cipher c = Cipher.getInstance("AES");
    c.init(Cipher.ENCRYPT_MODE, key);
    byte[] encVal = c.doFinal(Data.getBytes());
    String encryptedValue = new BASE64Encoder().encode(encVal);
    return encryptedValue;
}

public static String decrypt(String encryptedData) throws Exception {
    Key key = generateKey();
    Cipher c = Cipher.getInstance(ALGO);
    c.init(Cipher.DECRYPT_MODE, key);
    byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
    byte[] decValue = c.doFinal(decordedValue);
    String decryptedValue = new String(decValue);
    return decryptedValue;
}
private static Key generateKey() throws Exception {
    Key key = new SecretKeySpec(keyValue, ALGO);
    return key;
}

public static void main(String[] args) throws Exception {

    String data = "SOME TEXT";
    String dataEnc = AES.encrypt(data);
    String dataDec = AES.decrypt(dataEnc);

    System.out.println("Plain Text : " + data);
    System.out.println("Encrypted Text : " + dataEnc);
    System.out.println("Decrypted Text : " + dataDec);
}`

謝謝!!

doFinal返回的加密數據是二進制的,因此無法打印(它看起來像是一堆亂碼).Base64編碼將二進制文件轉換為一組ASCII字符,這使得它易於閱讀並使其成為可能在只能使用明文數據的情況下使用加密數據。

Base64編碼不會添加任何額外的加密或安全性,它只會使加密數據在您無法使用二進制文件的情況下可用。

生成的AES-256加密值可以包含一些不尋常的字符,當打印或通過互聯網發送時,可以在傳輸或視覺表示期間修改或誤解,截斷或替換。

Base64提供了一種編碼/解碼值的機制,因此它們可以“移動”而不會修改內容。 編寫此代碼的用戶可能需要存儲或傳輸此值。

您可以自己嘗試,並在編碼到Base64之前檢查生成的字符串。

因為doFinal()返回一個字節數組,字節通常很難理解。 暫且沒有這個程序可以使用AES-128而不是AES-256。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM