簡體   English   中英

Java如何檢查值已經AES加密;

[英]Java How to check value is already AES encrypted;

我創建了一個使用AES加密來加密表數據的工具。

加密方法

public String encrypt(String plainText) throws Exception {

        byte[] cipherBytes = null;

        log.info("Started encryption...");

        System.out.println("value before encryption :" + plainText);

        log.info("value before encryption :" + plainText);

        if (plainText != null && !plainText.isEmpty()) {
            if (cipher != null && key != null) {
                byte[] ivByte = new byte[cipher.getBlockSize()];
                IvParameterSpec ivParamsSpec = new IvParameterSpec(ivByte);
                cipher.init(Cipher.ENCRYPT_MODE, key, ivParamsSpec);
                cipherBytes = cipher.doFinal(plainText.getBytes());
                log.info("Completed encryption.");
                log.info("Encrypted data : " + new String(cipherBytes, "UTF8"));
                System.out.println("value after encryption" + Hex.encodeHexString(cipherBytes));
                log.info("value after encryption" + Hex.encodeHexString(cipherBytes));
                return Hex.encodeHexString(cipherBytes);
            } else {
                log.info("Encryption failed, cipher, key is null.");
                throw new RuntimeException(
                        "Encryption failed, cipher, key  is null.");
            }

        }


        return plainText;


    }
  • 輸入字符串: John Doee
  • 加密輸出: 4aa2173cb653f89e109b23218ecaea7f

我想避免雙重加密我的表數據。 我想檢查現有記錄是否已加密。 有沒有辦法檢查這個?

加密后,添加一些前綴,如AES: . 解密時,檢查是否存在前綴(並明顯刪除它)。

大量的密碼實現做類似的事情,其中​​前幾個字節識別算法。

與任何良好的加密方案一樣,只有密鑰必須是秘密的。 該算法可以公開而不會影響安全性。


唯一的邊緣情況是真正的明文以前綴開頭。 如果您認為這值得考慮,那么您可以通過選擇不太可能的前綴(可能利用明文知識)來降低風險。 為了進一步保證,您可以查看輸入的長度,因為真密文的長度保證是塊大小的倍數。

我同意邁克爾的觀點,最好在密文前加上一些標記。 但是如果你不能這樣做,還有一種概率方法:

您無法100%確定地識別原始加密數據。 但根據您的明文,您可以確定它是否未加密。 例如,MSB可以識別ASCII文本。 由於密文應該與隨機噪聲無法區分,因此加密數據不太可能具有相同的模式。

如果10個連續字節的MSB設置為零,則它成為密文的幾率僅為2 -10 ,即小於0.1%。

但畢竟您將密文編碼為十六進制字符串,因此您需要在分析期間將其反轉。

如果您的明文恰好是壓縮數據,那么可能性不大,因為熵幾乎與加密甚至隨機數據一樣高。

暫無
暫無

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

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