簡體   English   中英

與構造函數鏈接的混淆

[英]Confusion with Constructor chaining

我試圖了解一些構造函數鏈接,我知道從同一個類的另一個構造函數調用一個構造函數稱為構造函數鏈接,

當我們在構造函數中使用它時,實際上是在調用我們已經定義的另一個構造函數,但是我試圖理解的程序很奇怪,

public AESCipher(Key key) {
        this(key.getEncoded());
    }

    /**
     * Create AESCipher based on existing {@link Key} and Initial Vector (iv) in bytes
     *
     * @param key Key
     */
    public AESCipher(Key key, byte[] iv) {
        this(key.getEncoded(), iv);
    }

    /**
     * <p>Create AESCipher using a byte[] array as a key</p>
     * <p/>
     * <p><strong>NOTE:</strong> Uses an Initial Vector of 16 0x0 bytes. This should not be used to create strong security.</p>
     *
     * @param key Key
     */
    public AESCipher(byte[] key) {
        this(key, INITIAL_IV);
    }

    private AESCipher(byte[] key, byte[] iv) {
        try {
            this.secretKeySpec = new SecretKeySpec(key, "AES");
            this.iv = new IvParameterSpec(iv);
            this.cipher = Cipher.getInstance(ALGORITHM_AES256);
        } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
            throw Throwables.propagate(e);
        }
    }

在第一個構造函數中,此行使用this(key.getEncoded()) ,該行調用哪個構造函數? 實際上沒有構造函數,實際上沒有一個參數的構造函數。

在第三個構造函數中,只有一個類型為byte[]參數,這就是內部發生的情況,

this(key, INITIAL_IV);

它正在鏈接一個帶有兩個參數的構造函數,一個是key類型,另一個是byte[]類型,因此它正在鏈接此構造函數AESCipher(Key key, byte[] iv) ,這很好,但仍然...發生了什么在第一個構造函數中,以及為什么首先需要4個構造函數。

PS:我只是沒有發布這個問題,我花了大約4個小時試圖了解正在發生的事情,但是它太令人困惑了。

這是完整的代碼,

https://github.com/mike-ensor/aes-256-encryption-utility/blob/master/src/main/java/com/acquitygroup/encryption/AESCipher.java

第一個構造函數正在調用第三個構造函數: public AESCipher(byte[] key)

至於為什么首先有4個構造函數,它旨在封裝將Key轉換為byte[]的邏輯,並允許用戶選擇使用不同的初始向量。

暫無
暫無

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

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