JavaTM 2 Platform
Standard Ed. 6

javax.crypto
類別 Cipher

java.lang.Object
  繼承者 javax.crypto.Cipher
直接已知子類別:
NullCipher

public class Cipher
extends Object

此類別為加密和解密提供密碼功能。它構成了 Java Cryptographic Extension (JCE) 框架的核心。

為創建 Cipher 物件,應用程序調用 Cipher 的 getInstance 方法並將所請求轉換 的名稱傳遞給它。還可以指定提供者的名稱(可選)。

轉換 是一個字元串,它描述為產生某種輸出而在給定的輸入上執行的操作(或一組操作)。轉換始終包括加密演算法的名稱(例如,DES),後面可能跟有一個反饋網要和填充方案。

轉換具有以下形式:

(後一種情況下,使用網要和填充方案特定於提供者的預設值)。例如,以下是有效的轉換:

     Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding");
 
使用 CFBOFB 之類別的網要,Cipher 塊可以加密單元中小於該 Cipher 的實際塊大小的資料。請求這樣一個網要時,可以指定一次處理的位數(可選):將此數添加到網要名稱中,正如 "DES/CFB8/NoPadding" 和 "DES/OFB32/PKCS5Padding" 轉換所示。如果未指定該數,則將使用特定於提供者的預設值。(例如,SunJCE 提供者對 DES 使用預設的 64 位)。因此,通過使用如 CFB8 或 OFB8 的 8 位網要,Cipher 塊可以被轉換為導向位元組的 Cipher 串流。

從以下版本開始:
1.4
另請參見:
KeyGenerator, SecretKey

欄位摘要
static int DECRYPT_MODE
          用於將 Cipher 初始化為解密網要的常數。
static int ENCRYPT_MODE
          用於將 Cipher 初始化為加密網要的常數。
static int PRIVATE_KEY
          用於表示要解套件的密鑰為“私鑰”的常數。
static int PUBLIC_KEY
          用於表示要解套件的密鑰為“公鑰”的常數。
static int SECRET_KEY
          用於表示要解套件的密鑰為“秘密密鑰”的常數。
static int UNWRAP_MODE
          用於將 Cipher 初始化為密鑰解包網要的常數。
static int WRAP_MODE
          用於將 Cipher 初始化為密鑰包裹網要的常數。
 
建構子摘要
protected Cipher(CipherSpi cipherSpi, Provider provider, String transformation)
          創建 Cipher 物件。
 
方法摘要
 byte[] doFinal()
          結束多部分加密或解密操作(具體取決於此 Cipher 的初始化方式)。
 byte[] doFinal(byte[] input)
          按單部分操作加密或解密資料,或者結束一個多部分操作。
 int doFinal(byte[] output, int outputOffset)
          結束多部分加密或解密操作(具體取決於此 Cipher 的初始化方式)。
 byte[] doFinal(byte[] input, int inputOffset, int inputLen)
          按單部分操作加密或解密資料,或者結束一個多部分操作。
 int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output)
          按單部分操作加密或解密資料,或者結束一個多部分操作。
 int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
          按單部分操作加密或解密資料,或者結束一個多部分操作。
 int doFinal(ByteBuffer input, ByteBuffer output)
          按單部分操作加密或解密資料,或者結束一個多部分操作。
 String getAlgorithm()
          返回此 Cipher 物件的演算法名稱。
 int getBlockSize()
          返回塊的大小(以位元組為單位)。
 ExemptionMechanism getExemptionMechanism()
          返回此 Cipher 使用的豁免 (exemption) 機制物件。
static Cipher getInstance(String transformation)
          返回實作指定轉換的 Cipher 物件。
static Cipher getInstance(String transformation, Provider provider)
          返回實作指定轉換的 Cipher 物件。
static Cipher getInstance(String transformation, String provider)
          返回實作指定轉換的 Cipher 物件。
 byte[] getIV()
          返回新緩衝區中的初始化向量 (IV)。
static int getMaxAllowedKeyLength(String transformation)
          根據所安裝的 JCE 仲裁策略檔案,返回指定轉換的最大密鑰長度。
static AlgorithmParameterSpec getMaxAllowedParameterSpec(String transformation)
          根據仲裁策略檔案,返回包含最大 Cipher 參數值的 AlgorithmParameterSpec 物件。
 int getOutputSize(int inputLen)
          根據給定的輸入長度 inputLen(以位元組為單位),返回保存下一個 updatedoFinal 操作結果所需的輸出緩衝區長度(以位元組為單位)。
 AlgorithmParameters getParameters()
          返回此 Cipher 使用的參數。
 Provider getProvider()
          返回此 Cipher 物件的提供者。
 void init(int opmode, Certificate certificate)
          用取自給定證書的公鑰初始化此 Cipher。
 void init(int opmode, Certificate certificate, SecureRandom random)
          用取自給定證書的公鑰和隨機源初始化此 Cipher。
 void init(int opmode, Key key)
          用密鑰初始化此 Cipher。
 void init(int opmode, Key key, AlgorithmParameters params)
          用密鑰和一組演算法參數初始化此 Cipher。
 void init(int opmode, Key key, AlgorithmParameterSpec params)
          用密鑰和一組演算法參數初始化此 Cipher。
 void init(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random)
          用一個密鑰、一組演算法參數和一個隨機源初始化此 Cipher。
 void init(int opmode, Key key, AlgorithmParameters params, SecureRandom random)
          用一個密鑰、一組演算法參數和一個隨機源初始化此 Cipher。
 void init(int opmode, Key key, SecureRandom random)
          用密鑰和隨機源初始化此 Cipher。
 Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType)
          解包一個以前包裹的密鑰。
 byte[] update(byte[] input)
          繼續多部分加密或解密操作(具體取決於此 Cipher 的初始化方式),以處理其他資料部分。
 byte[] update(byte[] input, int inputOffset, int inputLen)
          繼續多部分加密或解密操作(具體取決於此 Cipher 的初始化方式),以處理其他資料部分。
 int update(byte[] input, int inputOffset, int inputLen, byte[] output)
          繼續多部分加密或解密操作(具體取決於此 Cipher 的初始化方式),以處理其他資料部分。
 int update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
          繼續多部分加密或解密操作(具體取決於此 Cipher 的初始化方式),以處理其他資料部分。
 int update(ByteBuffer input, ByteBuffer output)
          繼續多部分加密或解密操作(具體取決於此 Cipher 的初始化方式),以處理其他資料部分。
 byte[] wrap(Key key)
          包裹密鑰。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

ENCRYPT_MODE

public static final int ENCRYPT_MODE
用於將 Cipher 初始化為加密網要的常數。

另請參見:
常數欄位值

DECRYPT_MODE

public static final int DECRYPT_MODE
用於將 Cipher 初始化為解密網要的常數。

另請參見:
常數欄位值

WRAP_MODE

public static final int WRAP_MODE
用於將 Cipher 初始化為密鑰包裹網要的常數。

另請參見:
常數欄位值

UNWRAP_MODE

public static final int UNWRAP_MODE
用於將 Cipher 初始化為密鑰解包網要的常數。

另請參見:
常數欄位值

PUBLIC_KEY

public static final int PUBLIC_KEY
用於表示要解套件的密鑰為“公鑰”的常數。

另請參見:
常數欄位值

PRIVATE_KEY

public static final int PRIVATE_KEY
用於表示要解套件的密鑰為“私鑰”的常數。

另請參見:
常數欄位值

SECRET_KEY

public static final int SECRET_KEY
用於表示要解套件的密鑰為“秘密密鑰”的常數。

另請參見:
常數欄位值
建構子詳細資訊

Cipher

protected Cipher(CipherSpi cipherSpi,
                 Provider provider,
                 String transformation)
創建 Cipher 物件。

參數:
cipherSpi - 代理
provider - 提供者
transformation - 轉換
方法詳細資訊

getInstance

public static final Cipher getInstance(String transformation)
                                throws NoSuchAlgorithmException,
                                       NoSuchPaddingException
返回實作指定轉換的 Cipher 物件。

此方法從首選 Provider 開始遍歷已註冊安全提供者列表。返回一個封裝 CipherSpi 實作的新 Cipher 物件,該實作取自支持指定演算法的第一個 Provider。

注意,可以通過 Security.getProviders() 方法獲取已註冊提供者列表。

參數:
transformation - 轉換的名稱,例如 DES/CBC/PKCS5Padding。有關標準轉換名稱的資訊,請參見 Java Cryptography Architecture Reference Guide 的附錄 A。
返回:
實作所請求轉換的 Cipher。
拋出:
NoSuchAlgorithmException - 如果 transformation 為 null、空、無效格式,或者沒有 Provider 支持指定演算法的 CipherSpi 實作。
NoSuchPaddingException - 如果 transformation 套件含的填充方案不可用。
另請參見:
Provider

getInstance

public static final Cipher getInstance(String transformation,
                                       String provider)
                                throws NoSuchAlgorithmException,
                                       NoSuchProviderException,
                                       NoSuchPaddingException
返回實作指定轉換的 Cipher 物件。

返回一個封裝 CipherSpi 實作的新 Cipher 物件,該實作取自指定提供者。指定提供者必須在安全提供者列表中註冊。

注意,可以通過 Security.getProviders() 方法獲取已註冊提供者列表。

參數:
transformation - 轉換的名稱,例如 DES/CBC/PKCS5Padding。有關標準轉換名稱的資訊,請參見 Java Cryptography Architecture Reference Guide 的附錄 A。
provider - 提供者的名稱。
返回:
實作所請求轉換的 Cipher。
拋出:
NoSuchAlgorithmException - 如果 transformation 為 null、空、無效格式,或者不能從指定提供者獲得指定演算法的 CipherSpi 實作。
NoSuchProviderException - 如果指定提供者未在安全提供者列表中註冊。
NoSuchPaddingException - 如果 transformation 套件含的填充方案不可用。
IllegalArgumentException - 如果 provider 為 null 或空。
另請參見:
Provider

getInstance

public static final Cipher getInstance(String transformation,
                                       Provider provider)
                                throws NoSuchAlgorithmException,
                                       NoSuchPaddingException
返回實作指定轉換的 Cipher 物件。

返回一個封裝 CipherSpi 實作的新 Cipher 物件,該實作取自指定的 Provider 物件。 注意,指定的 Provider 物件無需在提供者列表中註冊。

參數:
transformation - 轉換的名稱,例如 DES/CBC/PKCS5Padding。有關標準轉換名稱的資訊,請參見 Java Cryptography Architecture Reference Guide 的附錄 A。
provider - 提供者。
返回:
實作所請求轉換的 Cipher。
拋出:
NoSuchAlgorithmException - 如果 transformation 為 null、空、無效格式,或者不能從指定 Provider 物件獲得指定演算法的 CipherSpi 實作。
NoSuchPaddingException - 如果 transformation 套件含的填充方案不可用。
IllegalArgumentException - 如果 provider 為 null。
另請參見:
Provider

getProvider

public final Provider getProvider()
返回此 Cipher 物件的提供者。

返回:
Cipher 物件的提供者

getAlgorithm

public final String getAlgorithm()
返回此 Cipher 物件的演算法名稱。

這與創建此 Cipher 物件的 getInstance 調用之一指定的名稱相同。

返回:
Cipher 物件的演算法名稱。

getBlockSize

public final int getBlockSize()
返回塊的大小(以位元組為單位)。

返回:
塊的大小(以位元組為單位);如果底層演算法不是 Cipher 塊,則返回 0

getOutputSize

public final int getOutputSize(int inputLen)
根據給定的輸入長度 inputLen(以位元組為單位),返回保存下一個 updatedoFinal 操作結果所需的輸出緩衝區長度(以位元組為單位)。

此調用還考慮到任何取自上一個 update 調用的未處理(已快取記憶體)資料和填充。

下一個 updatedoFinal 調用的實際輸出長度可能小於此方法返回的長度。

參數:
inputLen - 輸入長度(以位元組為單位)
返回:
所需的輸出緩衝區大小(以位元組為單位)
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤的狀態(例如,尚未初始化)

getIV

public final byte[] getIV()
返回新緩衝區中的初始化向量 (IV)。

在創建隨機 IV 的情況下,或者在基於密碼加密或解密的上下文中(其中,IV 派生自使用者提供的密碼)此方法很有用。

返回:
新緩衝區中的初始化向量;如果底層演算法不使用 IV,或者 IV 尚未設置,則返回 null。

getParameters

public final AlgorithmParameters getParameters()
返回此 Cipher 使用的參數。

返回的參數可能與初始化此 Cipher 所使用的參數相同;如果此 Cipher 需要演算法參數但卻未使用任何參數進行初始化,則返回的參數將由預設值和底層 Cipher 實作所使用的隨機參數值組成。

返回:
此 Cipher 使用的參數;如果此 Cipher 不使用任何參數,則返回 null。

getExemptionMechanism

public final ExemptionMechanism getExemptionMechanism()
返回此 Cipher 使用的豁免 (exemption) 機制物件。

返回:
此 Cipher 使用的豁免機制物件,如果此 Cipher 不使用任何豁免機制,則返回 null。

init

public final void init(int opmode,
                       Key key)
                throws InvalidKeyException
用密鑰初始化此 Cipher。

為以下 4 種操作之一初始化該 Cipher:加密、解密、密鑰包裹或密鑰解包,具體取決於 opmode 的值。

如果此 Cipher 需要任何無法從給定 key 派生的演算法參數,則在為加密或密鑰包裹初始化時,底層 Cipher 實作應自己產生所需的參數(使用特定於提供者的預設值或隨機值);在為解密或密鑰解包初始化時,將引發 InvalidKeyException。可以用 getParametersgetIV 獲取產生的參數(如果該參數為 IV)。

如果此 Cipher(包括其底層反饋或填充方案)需要隨機位元組(例如,用於參數產生),那麼它將使用具有最高優先級的已安裝提供者的 SecureRandom 實作作為隨機源獲取這些位元組。(如果已安裝的提供者都不提供 SecureRandom 實作,則將使用系統提供的隨機源)。

注意,初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。

參數:
opmode - 此 Cipher 的操作網要(為以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
key - 密鑰
拋出:
InvalidKeyException - 如果給定的 key 不適合初始化此 Cipher;如果此 Cipher 為解密初始化,並且所需演算法參數無法從給定的 key 確定;如果給定 key 的鍵大小超出所允許的最大值(由已配置的仲裁策略檔案確定)。

init

public final void init(int opmode,
                       Key key,
                       SecureRandom random)
                throws InvalidKeyException
用密鑰和隨機源初始化此 Cipher。

為以下 4 種操作之一初始化該 Cipher:加密、解密、密鑰包裹或密鑰解包,具體取決於 opmode 的值。

如果此 Cipher 需要演算法參數,而參數無法從給定的 key 派生,則在為加密或密鑰包裹初始化時,底層 Cipher 實作應自己產生所需的參數(使用特定於提供者的預設值或隨機值);在為解密或密鑰解包初始化時,將引發 InvalidKeyException。可以用 getParametersgetIV 獲取產生的參數(如果該參數為 IV)。

如果此 Cipher(包括其底層反饋或填充方案)需要隨機位元組(例如,用於參數產生),那麼它將從 random 獲取這些隨機位元組。

注意,初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。

參數:
opmode - 此 Cipher 的操作網要(為以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
key - 加密密鑰
random - 隨機源
拋出:
InvalidKeyException - 如果給定的 key 不適合初始化此 Cipher;如果此 Cipher 為解密初始化,並且所需演算法參數無法從給定的 key 確定;如果給定 key 的鍵大小超出所允許的最大值(由已配置的仲裁策略檔案確定)。

init

public final void init(int opmode,
                       Key key,
                       AlgorithmParameterSpec params)
                throws InvalidKeyException,
                       InvalidAlgorithmParameterException
用密鑰和一組演算法參數初始化此 Cipher。

為以下 4 種操作之一初始化該 Cipher:加密、解密、密鑰包裹或密鑰解包,具體取決於 opmode 的值。

如果此 Cipher 需要演算法參數,而 params 為 null,則在為加密或密鑰包裹初始化時,底層 Cipher 實作應自己產生所需的參數(使用特定於提供者的預設值或隨機值);在為解密或密鑰解包初始化時,將引發 InvalidAlgorithmParameterException。可以用 getParametersgetIV 獲取產生的參數(如果該參數為 IV)。

如果此 Cipher(包括其底層反饋或填充方案)需要隨機位元組(例如,用於參數產生),那麼它將使用具有最高優先級的已安裝提供者的 SecureRandom 實作作為隨機源來獲取這些位元組。(如果已安裝的提供者都不提供 SecureRandom 實作,則將使用系統提供的隨機源)。

注意,初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。

參數:
opmode - 此 Cipher 的操作網要(為以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
key - 加密密鑰
params - 演算法參數
拋出:
InvalidKeyException - 如果給定的 key 不適合初始化此 Cipher,或其它的鍵大小超出所允許的最大(由已配置的仲裁策略檔案確定)。
InvalidAlgorithmParameterException - 如果給定的演算法參數不適合此 Cipher;此 Cipher 為解密初始化,並且需要演算法參數而 params 為 null;給定的演算法參數所含的加密強度超出了合法限制(由已配置的仲裁策略檔案確定)。

init

public final void init(int opmode,
                       Key key,
                       AlgorithmParameterSpec params,
                       SecureRandom random)
                throws InvalidKeyException,
                       InvalidAlgorithmParameterException
用一個密鑰、一組演算法參數和一個隨機源初始化此 Cipher。

為以下 4 種操作之一初始化該 Cipher:加密、解密、密鑰包裹或密鑰解包,具體取決於 opmode 的值。

如果此 Cipher 需要演算法參數,而 params 為 null,則在為加密或密鑰包裹初始化時,底層 Cipher 實作應自己產生所需的參數(使用特定於提供者的預設值或隨機值);在為解密或密鑰解包初始化時,將引發 InvalidAlgorithmParameterException。可以用 getParametersgetIV 獲取產生的參數(如果該參數為 IV)。

如果此 Cipher(包括其底層反饋或填充方案)需要隨機位元組(例如,用於參數產生),那麼它將從 random 獲取這些隨機位元組。

注意,初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。

參數:
opmode - 此 Cipher 的操作網要(為以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
key - 加密密鑰
params - 演算法參數
random - 隨機源
拋出:
InvalidKeyException - 如果給定的 key 不適合初始化此 Cipher,或其鍵大小超出所允許的最大值(由已配置的仲裁策略檔案確定)。
InvalidAlgorithmParameterException - 如果給定的演算法參數不適合此 Cipher;此 Cipher 為解密初始化,並且需要演算法參數而 params 為 null;給定的演算法參數所含的加密強度超出了合法限制(由已配置的仲裁策略檔案確定)。

init

public final void init(int opmode,
                       Key key,
                       AlgorithmParameters params)
                throws InvalidKeyException,
                       InvalidAlgorithmParameterException
用密鑰和一組演算法參數初始化此 Cipher。

為以下 4 種操作之一初始化該 Cipher:加密、解密、密鑰包裹或密鑰解包,具體取決於 opmode 的值。

如果此 Cipher 需要演算法參數,而 params 為 null,則在為加密或密鑰包裹初始化時,底層 Cipher 實作應自己產生所需的參數(使用特定於提供者的預設值或隨機值);在初始化為解密或密鑰解包時,將引發 InvalidAlgorithmParameterException。可以用 getParametersgetIV 獲取產生的參數(如果該參數為 IV)。

如果此 Cipher(包括其底層反饋或填充方案)需要隨機位元組(例如,用於參數產生),那麼它將使用具有最高優先級的已安裝提供者的 SecureRandom 實作作為隨機源來獲取這些位元組。(如果已安裝的提供者都不提供 SecureRandom 實作,則將使用系統提供的隨機源)。

注意,初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。

參數:
opmode - 此 Cipher 的操作網要(為以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
key - 加密密鑰
params - 演算法參數
拋出:
InvalidKeyException - 如果給定的 key 不適合初始化此 Cipher,或其鍵大小超出所允許的最大值(由已配置的仲裁策略檔案確定)。
InvalidAlgorithmParameterException - 如果給定的演算法參數不適合此 Cipher;此 Cipher 為解密初始化,並且需要演算法參數而 params 為 null;給定的演算法參數所含的加密強度超出了合法限制(由已配置的仲裁策略檔案確定)。

init

public final void init(int opmode,
                       Key key,
                       AlgorithmParameters params,
                       SecureRandom random)
                throws InvalidKeyException,
                       InvalidAlgorithmParameterException
用一個密鑰、一組演算法參數和一個隨機源初始化此 Cipher。

為以下 4 種操作之一初始化該 Cipher:加密、解密、密鑰包裹或密鑰解包,具體取決於 opmode 的值。

如果此 Cipher 需要演算法參數,而 params 為 null,則在為加密或密鑰包裹初始化時,底層 Cipher 實作應自己產生所需的參數(使用特定於提供者的預設值或隨機值);在為解密或密鑰解包初始化時,將引發 InvalidAlgorithmParameterException。可以用 getParametersgetIV 獲取產生的參數(如果該參數為 IV)。

如果此 Cipher(包括其底層反饋或填充方案)需要隨機位元組(例如,用於參數產生),那麼它將從 random 獲取這些隨機位元組。

注意,初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。

參數:
opmode - 此 Cipher 的操作網要(為以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
key - 加密密鑰
params - 演算法參數
random - 隨機源
拋出:
InvalidKeyException - 如果給定的 key 不適合初始化此 Cipher,或其鍵大小超出所允許的最大值(由已配置的仲裁策略檔案確定)。
InvalidAlgorithmParameterException - 如果給定的演算法參數不適合此 Cipher;此 Cipher 為解密初始化,並且需要演算法參數而 params 為 null;給定的演算法參數所含的加密強度超出了合法限制(由已配置的仲裁策略檔案確定)。

init

public final void init(int opmode,
                       Certificate certificate)
                throws InvalidKeyException
用取自給定證書的公鑰初始化此 Cipher。

為以下 4 種操作之一初始化該 Cipher:加密、解密、密鑰包裹或密鑰解包,具體取決於 opmode 的值。

如果證書型別為 X.509 並有一個標記為關鍵的 key usage 擴展欄位,且此 key usage 擴展欄位的值表示在 opmode 值所代表的操作中不應該使用該證書中的公鑰及其相應的私鑰,則拋出 InvalidKeyException

如果此 Cipher 需要演算法參數,而此參數無法從給定證書中的公鑰派生,則在為加密或密鑰包裹初始化時,底層 Cipher 實作應自己產生所需的參數(使用特定於提供者的預設值或隨機值);在為解密或密鑰解包初始化時,將引發 InvalidKeyException。可以用 getParametersgetIV 獲取產生的參數(如果該參數為 IV)。

如果此 Cipher(包括其底層反饋或填充方案)需要隨機位元組(例如,用於參數產生),那麼它將使用具有最高優先級的已安裝提供者的 SecureRandom 實作作為隨機源獲取這些位元組。(如果已安裝的提供者都不提供 SecureRandom 實作,則將使用系統提供的隨機源)。

注意,初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。

參數:
opmode - 此 Cipher 的操作網要(為以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
certificate - 證書
拋出:
InvalidKeyException - 如果給定證書中的公鑰不適合初始化此 Cipher;此 Cipher 為解密或解包密鑰初始化,並且所需演算法參數無法通過給定證書的公鑰確定;給定證書中公鑰的鍵大小超出所允許的最大值(由已配置的仲裁策略檔案確定)。

init

public final void init(int opmode,
                       Certificate certificate,
                       SecureRandom random)
                throws InvalidKeyException
用取自給定證書的公鑰和隨機源初始化此 Cipher。

為以下 4 種操作之一初始化該 Cipher:加密、解密、密鑰包裹或密鑰解包,具體取決於 opmode 的值。

如果證書型別為 X.509 並有一個標記為關鍵的 key usage 擴展欄位,且此 key usage 擴展欄位的值表示在 opmode 值所代表的操作中不應該使用該證書中的公鑰及其相應的私鑰,則拋出 InvalidKeyException

如果此 Cipher 需要演算法參數,而此參數無法從給定 certificate 中的公鑰派生,則在為加密或密鑰包裹初始化時,底層 Cipher 實作應自己產生所需的參數(使用特定於提供者的預設值或隨機值);在為解密或密鑰解包初始化時,將引發 InvalidKeyException。可以用 getParametersgetIV 獲取產生的參數(如果該參數為 IV)。

如果此 Cipher(包括其底層反饋或填充方案)需要隨機位元組(例如,用於參數產生),那麼它將從 random 獲取這些隨機位元組。

注意,初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。

參數:
opmode - 此 Cipher 的操作網要(為以下之一:ENCRYPT_MODEDECRYPT_MODEWRAP_MODEUNWRAP_MODE
certificate - 證書
random - 隨機源
拋出:
InvalidKeyException - 如果給定證書中的公鑰不適合初始化此 Cipher;此 Cipher 為解密或解包密鑰初始化,並且所需演算法參數無法通過給定證書的公鑰確定;給定證書中公鑰的鍵大小超出所允許的最大值(由已配置的仲裁策略檔案確定)。

update

public final byte[] update(byte[] input)
繼續多部分加密或解密操作(具體取決於此 Cipher 的初始化方式),以處理其他資料部分。

處理 input 緩衝區中的位元組,並將結果存儲在新的緩衝區中。

如果 input 長度為 0,則此方法返回 null

參數:
input - 輸入緩衝區
返回:
包含結果的新緩衝區;如果底層 Cipher 為 Cipher 塊並且輸入資料太短而無法形成新的塊,則返回 null。
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)

update

public final byte[] update(byte[] input,
                           int inputOffset,
                           int inputLen)
繼續多部分加密或解密操作(具體取決於此 Cipher 的初始化方式),以處理其他資料部分。

處理 input 緩衝區中從 inputOffset 開始(包含)的前 inputLen 個位元組,並將結果存儲在新的緩衝區中。

如果 inputLen 為 0,則此方法返回 null

參數:
input - 輸入緩衝區
inputOffset - input 中輸入起始處的偏移量
inputLen - 輸入長度
返回:
包含結果的新緩衝區;如果底層 Cipher 為 Cipher 塊並且輸入資料太短而無法形成新的塊,則返回 null。
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)

update

public final int update(byte[] input,
                        int inputOffset,
                        int inputLen,
                        byte[] output)
                 throws ShortBufferException
繼續多部分加密或解密操作(具體取決於此 Cipher 的初始化方式),以處理其他資料部分。

處理 input 緩衝區中從 inputOffset 開始(包含)的前 inputLen 個位元組,並將結果存儲在 output 緩衝區中。

如果 output 緩衝區太小無法保存該結果,則拋出 ShortBufferException。這種情況下,使用一個稍大的緩衝區再次調用。使用 getOutputSize 確定輸出緩衝區應為多大。

如果 inputLen 為 0,則此方法返回的長度為 0。

註:此方法應該是複製安全 (copy-safe) 的,這意味著 inputoutput 緩衝區可參考相同的 byte 陣列,並且在將結果複製到輸出緩衝區時,不會覆寫任何未處理的輸入資料。

參數:
input - 輸入緩衝區
inputOffset - input 中輸入起始處的偏移量
inputLen - 輸入長度
output - 保存結果的緩衝區
返回:
output 中存儲的位元組數
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
ShortBufferException - 如果給定的輸出緩衝區太小而無法保存結果

update

public final int update(byte[] input,
                        int inputOffset,
                        int inputLen,
                        byte[] output,
                        int outputOffset)
                 throws ShortBufferException
繼續多部分加密或解密操作(具體取決於此 Cipher 的初始化方式),以處理其他資料部分。

處理 input 緩衝區中從 inputOffset 開始(包含)的前 inputLen 個位元組,並將結果存儲在 output 緩衝區中從 outputOffset 開始(包含)的位置。

如果 output 緩衝區太小無法保存該結果,則拋出 ShortBufferException。這種情況下,使用一個稍大的緩衝區再次調用。使用 getOutputSize 確定輸出緩衝區應為多大。

如果 inputLen 為 0,則此方法返回的長度為 0。

註:此方法應該是複製安全的,這意味著 inputoutput 緩衝區可參考相同的 byte 陣列,並且在將結果複製到輸出緩衝區時,不會覆寫任何未處理的輸入資料。

參數:
input - 輸入緩衝區
inputOffset - input 中輸入起始處的偏移量
inputLen - 輸入長度
output - 保存結果的緩衝區
outputOffset - output 中存儲結果處的偏移量
返回:
output 中存儲的位元組數
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
ShortBufferException - 如果給定的輸出緩衝區太小而無法保存結果

update

public final int update(ByteBuffer input,
                        ByteBuffer output)
                 throws ShortBufferException
繼續多部分加密或解密操作(具體取決於此 Cipher 的初始化方式),以處理其他資料部分。

處理從 input.position() 開始的所有 input.remaining() 個位元組。將結果存儲在輸出緩衝區中。返回時,輸入緩衝區的位置將等於其限制;其限制不變。輸出緩衝區的位置將前移 n,其中 n 為此方法返回的值;輸出緩衝區的限制不變。

如果 output.remaining() 個位元組還不夠保存該結果,則拋出 ShortBufferException。這種情況下,使用一個稍大的緩衝區再次調用。使用 getOutputSize 確定輸出緩衝區應為多大。

註:此方法應該是複製安全的,這意味著 inputoutput 緩衝區可參考相同的記憶體塊,並且在將結果複製到輸出緩衝區時,不會覆寫任何未處理的輸入資料。

參數:
input - 輸入 ByteBuffer
output - 輸出 ByteBuffer
返回:
output 中存儲的位元組數
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
IllegalArgumentException - 如果輸入和輸出為相同的物件
ReadOnlyBufferException - 如果輸出緩衝區為只讀
ShortBufferException - 如果輸出緩衝區中沒有足夠的空間
從以下版本開始:
1.5

doFinal

public final byte[] doFinal()
                     throws IllegalBlockSizeException,
                            BadPaddingException
結束多部分加密或解密操作(具體取決於此 Cipher 的初始化方式)。

處理在上一次 update 操作中快取記憶體的輸入資料,其中應用了填充(如果請求)。結果將存儲在新緩衝區中。

結束時,此方法將此 Cipher 物件重置為上一次調用 init 初始化得到的狀態。即該物件被重置,並可用於加密或解密(具體取決於調用 init 時指定的操作網要)更多的資料。

註:如果拋出了任何異常,則再次使用此 Cipher 物件前需要將其重置。

返回:
包含結果的新緩衝區
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
IllegalBlockSizeException - 如果此 Cipher 為 Cipher 塊,未請求任何填充(只針對加密網要),並且由此 Cipher 處理的資料總輸入長度不是塊大小的倍數;如果此加密演算法無法處理所提供的輸入資料。
BadPaddingException - 如果此 Cipher 為解密網要,並且未請求填充(或不填充),但解密的資料沒有用適當的填充位元組進行限制

doFinal

public final int doFinal(byte[] output,
                         int outputOffset)
                  throws IllegalBlockSizeException,
                         ShortBufferException,
                         BadPaddingException
結束多部分加密或解密操作(具體取決於此 Cipher 的初始化方式)。

處理在上一次 update 操作中快取記憶體的輸入資料,其中應用了填充(如果請求)。結果存儲在 output 緩衝區中從 outputOffset(包含)開始的位置。

如果 output 緩衝區太小無法保存該結果,則拋出 ShortBufferException。這種情況下,使用一個稍大的緩衝區再次調用。使用 getOutputSize 確定輸出緩衝區應為多大。

結束時,此方法將此 Cipher 物件重置為上一次調用 init 初始化得到的狀態。即該物件被重置,並可用於加密或解密(具體取決於調用 init 時指定的操作網要)更多的資料。

註:如果拋出了任何異常,則再次使用此 Cipher 物件前需要將其重置。

參數:
output - 用於保存結果的緩衝區
outputOffset - output 中保存結果處的偏移量
返回:
output 中存儲的位元組數
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
IllegalBlockSizeException - 如果此 Cipher 為 Cipher 塊,未請求任何填充(只針對加密網要),並且由此 Cipher 處理的資料總輸入長度不是塊大小的倍數;如果此加密演算法無法處理所提供的輸入資料。
ShortBufferException - 如果給定的輸出緩衝區太小無法保存結果
BadPaddingException - 如果 Cipher 為解密網要,並且未請求填充(或不填充),但解密的資料沒有用適當的填充位元組進行限制

doFinal

public final byte[] doFinal(byte[] input)
                     throws IllegalBlockSizeException,
                            BadPaddingException
按單部分操作加密或解密資料,或者結束一個多部分操作。資料將被加密或解密(具體取決於此 Cipher 的初始化方式)。

處理 input 緩衝區中的位元組以及在上一次 update 操作中快取記憶體的任何輸入位元組,其中應用了填充(如果請求)。結果將存儲在新緩衝區中。

結束時,此方法將此 Cipher 物件重置為上一次調用 init 初始化得到的狀態。即該物件被重置,並可用於加密或解密(具體取決於調用 init 時指定的操作網要)更多的資料。

註:如果拋出了任何異常,則再次使用此 Cipher 物件前需要將其重置。

參數:
input - 輸入緩衝區
返回:
包含結果的新緩衝區
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
IllegalBlockSizeException - 如果此 Cipher 為 Cipher 塊,未請求任何填充(只針對加密網要),並且由此 Cipher 處理的資料總輸入長度不是塊大小的倍數;如果此加密演算法無法處理所提供的輸入資料。
BadPaddingException - 如果此 Cipher 為解密網要,並且未請求填充(或不填充),但解密的資料沒有用適當的填充位元組進行限制

doFinal

public final byte[] doFinal(byte[] input,
                            int inputOffset,
                            int inputLen)
                     throws IllegalBlockSizeException,
                            BadPaddingException
按單部分操作加密或解密資料,或者結束一個多部分操作。資料將被加密或解密(具體取決於此 Cipher 的初始化方式)。

處理 input 緩衝區中從 inputOffset 開始(包含)的前 inputLen 個位元組,以及在上一次 update 操作過程中快取記憶體的任何輸入位元組,其中應用了填充(如果需要)。結果將存儲在新緩衝區中。

結束時,此方法將此 Cipher 物件重置為上一次調用 init 初始化得到的狀態。即該物件被重置,並可用於加密或解密(具體取決於調用 init 時指定的操作網要)更多的資料。

註:如果拋出了任何異常,則再次使用此 Cipher 物件前需要將其重置。

參數:
input - 輸入緩衝區
inputOffset - input 中輸入起始處的偏移量
inputLen - 輸入長度
返回:
包含結果的新緩衝區
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
IllegalBlockSizeException - 如果此 Cipher 為 Cipher 塊,未請求任何填充(只針對加密網要),並且由此 Cipher 處理的資料總輸入長度不是塊大小的倍數;如果此加密演算法無法處理所提供的輸入資料。
BadPaddingException - 如果此 Cipher 為解密網要,並且未請求填充(或不填充),但解密的資料沒有用適當的填充位元組進行限制

doFinal

public final int doFinal(byte[] input,
                         int inputOffset,
                         int inputLen,
                         byte[] output)
                  throws ShortBufferException,
                         IllegalBlockSizeException,
                         BadPaddingException
按單部分操作加密或解密資料,或者結束一個多部分操作。資料將被加密或解密(具體取決於此 Cipher 的初始化方式)。

處理 input 緩衝區中從 inputOffset 開始(包含)的前 inputLen 個位元組,以及在上一次 update 操作過程中快取記憶體的任何輸入位元組,其中應用了填充(如果需要)。結果將存儲在 output 緩衝區中。

如果 output 緩衝區太小無法保存該結果,則拋出 ShortBufferException。這種情況下,使用一個稍大的緩衝區再次調用。使用 getOutputSize 確定輸出緩衝區應為多大。

結束時,此方法將此 Cipher 物件重置為上一次調用 init 初始化得到的狀態。即該物件被重置,並可用於加密或解密(具體取決於調用 init 時指定的操作網要)更多的資料。

註:如果拋出了任何異常,則再次使用此 Cipher 物件前需要將其重置。

註:此方法應該是複製安全的,這意味著 inputoutput 緩衝區可參考相同的 byte 陣列,並且在將結果複製到輸出緩衝區時,不會覆寫任何未處理的輸入資料。

參數:
input - 輸入緩衝區
inputOffset - input 中輸入起始處的偏移量
inputLen - 輸入長度
output - 保存結果的緩衝區
返回:
output 中存儲的位元組數
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
IllegalBlockSizeException - 如果此 Cipher 為 Cipher 塊,未請求任何填充(只針對加密網要),並且由此 Cipher 處理的資料總輸入長度不是塊大小的倍數;如果此加密演算法無法處理所提供的輸入資料。
ShortBufferException - 如果給定的輸出緩衝區太小無法保存結果
BadPaddingException - 如果 Cipher 為解密網要,並且未請求填充(或不填充),但解密的資料沒有用適當的填充位元組進行限制

doFinal

public final int doFinal(byte[] input,
                         int inputOffset,
                         int inputLen,
                         byte[] output,
                         int outputOffset)
                  throws ShortBufferException,
                         IllegalBlockSizeException,
                         BadPaddingException
按單部分操作加密或解密資料,或者結束一個多部分操作。資料將被加密或解密(具體取決於此 Cipher 的初始化方式)。

處理 input 緩衝區中從 inputOffset 開始(包含)的前 inputLen 個位元組,以及在上一次 update 操作過程中快取記憶體的任何輸入位元組,其中應用了填充(如果需要)。結果將存儲在 output 緩衝區中從 outputOffset(包含)開始的位置。

如果 output 緩衝區太小無法保存該結果,則拋出 ShortBufferException。這種情況下,使用一個稍大的緩衝區再次調用。使用 getOutputSize 確定輸出緩衝區應為多大。

結束時,此方法將此 Cipher 物件重置為上一次調用 init 初始化得到的狀態。即該物件被重置,並可用於加密或解密(具體取決於調用 init 時指定的操作網要)更多的資料。

註:如果拋出了任何異常,則再次使用此 Cipher 物件前需要將其重置。

註:此方法應該是複製安全的,這意味著 inputoutput 緩衝區可參考相同的 byte 陣列,並且在將結果複製到輸出緩衝區時,不會覆寫任何未處理的輸入資料。

參數:
input - 輸入緩衝區
inputOffset - input 中輸入起始處的偏移量
inputLen - 輸入長度
output - 保存結果的緩衝區
outputOffset - output 中存儲結果處的偏移量
返回:
output 中存儲的位元組數
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
IllegalBlockSizeException - 如果此 Cipher 為 Cipher 塊,未請求任何填充(只針對加密網要),並且由此 Cipher 處理的資料總輸入長度不是塊大小的倍數;如果此加密演算法無法處理所提供的輸入資料。
ShortBufferException - 如果給定的輸出緩衝區太小無法保存結果
BadPaddingException - 如果 Cipher 為解密網要,並且未請求填充(或不填充),但解密的資料沒有用適當的填充位元組進行限制

doFinal

public final int doFinal(ByteBuffer input,
                         ByteBuffer output)
                  throws ShortBufferException,
                         IllegalBlockSizeException,
                         BadPaddingException
按單部分操作加密或解密資料,或者結束一個多部分操作。資料將被加密或解密(具體取決於此 Cipher 的初始化方式)。

處理從 input.position() 開始的所有 input.remaining() 個位元組。結果將存儲在輸出緩衝區中。返回時,輸入緩衝區的位置將等於其限制;其限制不變。輸出緩衝區的位置將前移 n,其中 n 為此方法返回的值;輸出緩衝區的限制不變。

如果 output.remaining() 個位元組還不夠保存該結果,則拋出 ShortBufferException。這種情況下,使用一個稍大的緩衝區再次調用。使用 getOutputSize 確定輸出緩衝區應為多大。

結束時,此方法將此 Cipher 物件重置為上一次調用 init 初始化得到的狀態。即該物件被重置,並可用於加密或解密(具體取決於調用 init 時指定的操作網要)更多的資料。

註:如果拋出了任何異常,則再次使用此 Cipher 物件前需要將其重置。

註:此方法應該是複製安全的,這意味著 inputoutput 緩衝區可參考相同的 byte 陣列,並且在將結果複製到輸出緩衝區時,不會覆寫任何未處理的輸入資料。

參數:
input - 輸入 ByteBuffer
output - 輸出 ByteBuffer
返回:
output 中存儲的位元組數
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
IllegalArgumentException - 如果輸入和輸出為相同的物件
ReadOnlyBufferException - 如果輸出緩衝區為只讀
IllegalBlockSizeException - 如果此 Cipher 為 Cipher 塊,未請求任何填充(只針對加密網要),並且由此 Cipher 處理的資料總輸入長度不是塊大小的倍數;如果此加密演算法無法處理所提供的輸入資料。
ShortBufferException - 如果輸出緩衝區沒有足夠的空間
BadPaddingException - 如果 Cipher 為解密網要,並且未請求填充(或不填充),但解密的資料沒有用適當的填充位元組進行限制
從以下版本開始:
1.5

wrap

public final byte[] wrap(Key key)
                  throws IllegalBlockSizeException,
                         InvalidKeyException
包裹密鑰。

參數:
key - 要包裹的密鑰。
返回:
已包裹的密鑰。
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
IllegalBlockSizeException - 如果此 Cipher 為 Cipher 塊,未請求填充,並且要包裹的密鑰的編碼長度不是塊大小的倍數。
InvalidKeyException - 如果不能用此 Cipher 套件裝該密鑰,或者這樣做不安全(例如,將一個硬體保護的密鑰傳給只能用於軟體保護的 Cipher)。

unwrap

public final Key unwrap(byte[] wrappedKey,
                        String wrappedKeyAlgorithm,
                        int wrappedKeyType)
                 throws InvalidKeyException,
                        NoSuchAlgorithmException
解包一個以前包裹的密鑰。

參數:
wrappedKey - 要解套件的密鑰。
wrappedKeyAlgorithm - 與此套件裝密鑰關聯的演算法。
wrappedKeyType - 已包裹密鑰的型別。此型別必須為 SECRET_KEYPRIVATE_KEYPUBLIC_KEY 之一。
返回:
解套件的密鑰。
拋出:
IllegalStateException - 如果此 Cipher 處於錯誤狀態(例如,尚未初始化)
NoSuchAlgorithmException - 如果沒有一個已安裝的提供者能夠針對 wrappedKeyAlgorithm 創建型別為 wrappedKeyType 的密鑰。
InvalidKeyException - 如果 wrappedKey 不表示針對 wrappedKeyAlgorithm 的型別為 wrappedKeyType 的已包裹密鑰。

getMaxAllowedKeyLength

public static final int getMaxAllowedKeyLength(String transformation)
                                        throws NoSuchAlgorithmException
根據所安裝的 JCE 仲裁策略檔案,返回指定轉換的最大密鑰長度。如果安裝了 JCE 無限制強度仲裁策略檔案,則返回 Integer.MAX_VALUE。有關 JCE 仲裁策略檔案中的預設密鑰大小的更多資訊,請參見 Java Cryptography Architecture Reference Guide 中的附錄 E。

參數:
transformation - Cipher 轉換。
返回:
最大密鑰長度(以位為單位) 或 Integer.MAX_VALUE。
拋出:
NullPointerException - 如果 transformation 為 null。
NoSuchAlgorithmException - 如果 transformation 不是有效的轉換,即格式不為“演算法”或“演算法/網要/填充”。
從以下版本開始:
1.5

getMaxAllowedParameterSpec

public static final AlgorithmParameterSpec getMaxAllowedParameterSpec(String transformation)
                                                               throws NoSuchAlgorithmException
根據仲裁策略檔案,返回包含最大 Cipher 參數值的 AlgorithmParameterSpec 物件。如果安裝了 JCE 無限制強度仲裁策略檔案,或者策略檔案中對用於指定轉換的參數沒有最大限制,則返回 null。

參數:
transformation - Cipher 轉換。
返回:
保存最大值的 AlgorithmParameterSpec,或者返回 null。
拋出:
NullPointerException - 如果 transformation 為 null。
NoSuchAlgorithmException - 如果 transformation 不是有效的轉換,即格式不為“演算法”或“演算法/網要/填充”。
從以下版本開始:
1.5

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only