|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object javax.crypto.CipherSpi
public abstract class CipherSpi
此類別為 Cipher
類別定義了服務提供者介面 (SPI)。此類別中的所有抽象方法都必須由每個想要提供實作特定 cipher 演算法的加密服務提供者實作。
為創建封裝了此 CipherSpi
類別實例的 Cipher
實例,應用程序調用 Cipher
引擎類別的 getInstance
處理器方法之一並指定請求的轉換。作為可選項,應用程序還可以指定提供者的名稱。
轉換 是描述為產生某種輸出而在給定的輸入上執行的操作(或一組操作)的字元串。轉換始終包括加密演算法的名稱(例如,DES),後面可能跟有一個反饋網要和填充方案。
轉換具有下面的形式:
(後一種情況下,使用此網要和填充方案的特定於提供者的預設值)。例如,以下是有效的轉換:
Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding");
一個提供者可能為每個演算法/網要/填充 組合提供一個單獨的類別,也有可能決定提供多個表示與演算法 或演算法/網要 或演算法//填充 (注意,是雙斜線)對應的子轉換的一般類別,在這種情況下,請求的網要和/或填充由 Cipher
的 getInstance
方法自動設置,它調用的是提供者的 CipherSpi
子類別的 engineSetMode
和 engineSetPadding
方法。
提供者主類別中的 Cipher
屬性可能具有以下格式之一:
// provider's subclass of "CipherSpi" implements "algName" with
// pluggable mode and padding
Cipher.
algName
// provider's subclass of "CipherSpi" implements "algName" in the
// specified "mode", with pluggable padding
Cipher.
algName/mode
// provider's subclass of "CipherSpi" implements "algName" with the
// specified "padding", with pluggable mode
Cipher.
algName//padding
// provider's subclass of "CipherSpi" implements "algName" with the
// specified "mode" and "padding"
Cipher.
algName/mode/padding
例如,某提供者可能提供實作 DES/ECB/PKCS5Padding 的 CipherSpi
子類別,以及實作 DES/CBC/PKCS5Padding、DES/CFB/PKCS5Padding 和 DES/OFB/PKCS5Padding 的 CipherSpi
子類別。該提供者在其主類別中將有以下 Cipher
屬性:
Cipher.
DES/ECB/PKCS5Padding
Cipher.
DES/CBC/PKCS5Padding
Cipher.
DES/CFB/PKCS5Padding
Cipher.
DES/OFB/PKCS5Padding
另一個提供者可能實作一個用於以上每個網要的類別(即一個用於 ECB 的類別、一個用於 CBC 的類別、一個用於 CFB 的類別及一個用於 OFB 的類別),一個用於 PKCS5Padding 的類別,以及一個通過子類別化 CipherSpi
所得到的通用 DES 類別。該提供者在其主類別中將有以下 Cipher
屬性:
Cipher.
DES
Cipher
引擎類別的 getInstance
處理器方法遵守這些規則,以便為“演算法”形式的轉換實例化提供者的 CipherSpi
實作:
CipherSpi
子類別。
如果已經註冊,則實例化此類別,使用其網要和填充方案的預設值(由提供者給出)。
如果未註冊,則拋出 NoSuchAlgorithmException
。
Cipher
引擎類別的 getInstance
處理器方法遵守這些規則,以便為“演算法/網要/填充”形式的轉換實例化提供者的 CipherSpi
實作:
CipherSpi
子類別。
如果已註冊,則將其實例化。
如果未註冊,則轉到下一步。
CipherSpi
子類別。
如果已註冊,則將其實例化,並在新實例上調用 engineSetPadding(padding)
。
如果未註冊,則轉到下一步。
CipherSpi
子類別(注意,是雙斜線的)。
如果已註冊,則將其實例化,並在新實例上調用 engineSetMode(mode)
。
如果未註冊,則轉到下一步。
CipherSpi
子類別。
如果已註冊,則將其實例化,並在新實例上調用 engineSetMode(mode)
和 engineSetPadding(padding)
。
如果未註冊,則拋出 NoSuchAlgorithmException
。
KeyGenerator
,
SecretKey
建構子摘要 | |
---|---|
CipherSpi()
|
方法摘要 | |
---|---|
protected abstract byte[] |
engineDoFinal(byte[] input,
int inputOffset,
int inputLen)
按單部分操作加密或解密資料,或者結束一個多部分操作。 |
protected abstract int |
engineDoFinal(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
按單部分操作加密或解密資料,或者結束一個多部分操作。 |
protected int |
engineDoFinal(ByteBuffer input,
ByteBuffer output)
按單部分操作加密或解密資料,或者結束一個多部分操作。 |
protected abstract int |
engineGetBlockSize()
返回塊的大小(以位元組為單位)。 |
protected abstract byte[] |
engineGetIV()
返回新緩衝區中的初始化向量 (IV)。 |
protected int |
engineGetKeySize(Key key)
返回給定密鑰物件的密鑰大小,以位為單位。 |
protected abstract int |
engineGetOutputSize(int inputLen)
在給定了輸入長度 inputLen (以位元組為單位)的情況下,返回用於保存下一個 update 或 doFinal 操作結果所需的輸出緩衝區長度的位元組數。 |
protected abstract AlgorithmParameters |
engineGetParameters()
返回此 cipher 使用的參數。 |
protected abstract void |
engineInit(int opmode,
Key key,
AlgorithmParameterSpec params,
SecureRandom random)
用一個密鑰、一組演算法參數和一個隨機源初始化此 cipher。 |
protected abstract void |
engineInit(int opmode,
Key key,
AlgorithmParameters params,
SecureRandom random)
用一個密鑰、一組演算法參數和一個隨機源初始化此 cipher。 |
protected abstract void |
engineInit(int opmode,
Key key,
SecureRandom random)
用密鑰和隨機源初始化此 cipher。 |
protected abstract void |
engineSetMode(String mode)
設置此 cipher 的網要。 |
protected abstract void |
engineSetPadding(String padding)
設置此 cipher 的填充機制。 |
protected Key |
engineUnwrap(byte[] wrappedKey,
String wrappedKeyAlgorithm,
int wrappedKeyType)
打開一個以前包裹的密鑰。 |
protected abstract byte[] |
engineUpdate(byte[] input,
int inputOffset,
int inputLen)
繼續多部分加密或解密操作(取決於此 cipher 的初始化方式),以處理其他資料部分。 |
protected abstract int |
engineUpdate(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
繼續多部分加密或解密操作(取決於此 cipher 的初始化方式),以處理其他資料部分。 |
protected int |
engineUpdate(ByteBuffer input,
ByteBuffer output)
繼續多部分加密或解密操作(取決於此 cipher 的初始化方式),以處理其他資料部分。 |
protected byte[] |
engineWrap(Key key)
將密鑰包裹。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
建構子詳細資訊 |
---|
public CipherSpi()
方法詳細資訊 |
---|
protected abstract void engineSetMode(String mode) throws NoSuchAlgorithmException
mode
- cipher 網要
NoSuchAlgorithmException
- 如果請求的 cipher 網要不存在protected abstract void engineSetPadding(String padding) throws NoSuchPaddingException
padding
- 填充機制
NoSuchPaddingException
- 如果請求的填充機制不存在protected abstract int engineGetBlockSize()
protected abstract int engineGetOutputSize(int inputLen)
inputLen
(以位元組為單位)的情況下,返回用於保存下一個 update
或 doFinal
操作結果所需的輸出緩衝區長度的位元組數。
此調用還考慮到來自上一個 update
調用的任何未處理(已快取記憶體)的資料和填充。
下一個 update
或 doFinal
調用的實際輸出長度可能小於此方法返回的長度。
inputLen
- 輸入長度(以位元組為單位)
protected abstract byte[] engineGetIV()
此方法在基於密碼的加密或解密上下文中很有用,此時 IV 派生自使用者提供的 passphrase。
protected abstract AlgorithmParameters engineGetParameters()
返回的參數可能與初始化此 cipher 所使用的參數相同;如果此 cipher 要求使用演算法參數但卻未使用任何參數進行初始化,則返回的參數可能會包含由預設值和底層 cipher 實作所使用的隨機參數值的組合。
protected abstract void engineInit(int opmode, Key key, SecureRandom random) throws InvalidKeyException
為以下 4 種操作之一初始化該 cipher:加密、解密、密鑰包裹或密鑰打開,這取決於 opmode
的值。
如果此 cipher 要求使用任何演算法參數,而此參數又無法從給定的 key
派生,則在被初始化為加密或密鑰包裹時,底層 cipher 實作將會自己產生所需的參數(使用特定於提供者的預設或隨機值);在初始化為解密或密鑰打開時,將引發 InvalidKeyException
。可以用 engineGetParameters
或 engineGetIV
獲取產生的參數(如果該參數為 IV)。
如果此 cipher(包括其底層反饋或填充方案)要求使用任何隨機位元組(例如,用於參數產生),那麼它將從 random
獲取這些隨機位元組。
注意,當初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。
opmode
- 此 cipher 的操作網要(其為如下之一:ENCRYPT_MODE
、DECRYPT_MODE
、WRAP_MODE
或 UNWRAP_MODE
)key
- 加密密鑰random
- 隨機源
InvalidKeyException
- 如果給定的 key 不適合初始化此 cipher,如果要將此 cipher 初始化為解密,並且它所要求的演算法參數無法從給定的 key 確定。protected abstract void engineInit(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
為以下 4 種操作之一初始化該 cipher:加密、解密、密鑰包裹或密鑰打開,這取決於 opmode
的值。
如果此 cipher 要求使用任何演算法參數,而 params
為 null,則在被初始化為加密或密鑰包裹時,底層 cipher 實作將會自己產生所需的參數(使用特定於提供者的預設或隨機值);在初始化為解密或密鑰打開時,將引發 InvalidAlgorithmParameterException
。可以用 engineGetParameters
或 engineGetIV
獲取產生的參數(如果該參數為 IV)。
如果此 cipher(包括其底層反饋或填充方案)要求使用任何隨機位元組(例如,用於參數產生),那麼它將從 random
獲取這些隨機位元組。
注意,當初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。
opmode
- 此 cipher 的操作網要(其為如下之一:ENCRYPT_MODE
、DECRYPT_MODE
、WRAP_MODE
或 UNWRAP_MODE
)key
- 加密密鑰params
- 演算法參數random
- 隨機源
InvalidKeyException
- 如果給定的 key 不適合初始化此 cipher
InvalidAlgorithmParameterException
- 如果給定的演算法參數不適合此 cipher,如果要將此 cipher 初始化為解密,並且要求使用演算法參數,而 params
為 null。protected abstract void engineInit(int opmode, Key key, AlgorithmParameters params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
為以下 4 種操作之一初始化該 cipher:加密、解密、密鑰包裹或密鑰打開,這取決於 opmode
的值。
如果此 cipher 要求使用任何演算法參數,而 params
為 null,則在被初始化為加密或密鑰包裹時,底層 cipher 實作將會自己產生所需的參數(使用特定於提供者的預設或隨機值);在初始化為解密或密鑰打開時,將引發 InvalidAlgorithmParameterException
。可以用 engineGetParameters
或 engineGetIV
獲取產生的參數(如果該參數為 IV)。
如果此 cipher(包括其底層反饋或填充方案)要求使用任何隨機位元組(例如,用於參數產生),那麼它將從 random
獲取這些隨機位元組。
注意,當初始化 Cipher 物件時,它將失去所有以前獲得的狀態。換句話說,初始化 Cipher 相當於創建該 Cipher 的一個新實例並將其初始化。
opmode
- 此 cipher 的操作網要(其為如下之一:ENCRYPT_MODE
、DECRYPT_MODE
、WRAP_MODE
或 UNWRAP_MODE
)key
- 加密密鑰params
- 演算法參數random
- 隨機源
InvalidKeyException
- 如果給定的 key 不適合初始化此 cipher
InvalidAlgorithmParameterException
- 如果給定的演算法參數不適合此 cipher,如果要將此 cipher 初始化為解密,並且要求使用演算法參數,而 params
為 null。protected abstract byte[] engineUpdate(byte[] input, int inputOffset, int inputLen)
處理 input
緩衝區中從 inputOffset
開始(包含)的前 inputLen
個位元組,並將結果存儲在新的緩衝區中。
input
- 輸入緩衝區inputOffset
- input
中輸入開始位置的偏移量inputLen
- 輸入長度
protected abstract int engineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException
處理 input
緩衝區中從 inputOffset
開始(包含)的前 inputLen
個位元組,並將結果存儲在 output
緩衝區中從 outputOffset
開始(包含)的位置。
如果 output
緩衝區太小無法保存該結果,則拋出 ShortBufferException
。
input
- 輸入緩衝區inputOffset
- input
中輸入開始位置的偏移量inputLen
- 輸入長度output
- 保存結果的緩衝區outputOffset
- output
中存儲結果的位置的偏移量
output
中存儲的位元組數
ShortBufferException
- 如果給定的輸出緩衝區太小無法保存該結果protected int engineUpdate(ByteBuffer input, ByteBuffer output) throws ShortBufferException
處理從 input.position()
開始的所有 input.remaining()
位元組。結果存儲在輸出緩衝區中。返回時,輸入緩衝區的位置將等於其限制;其限制並未改變。輸出緩衝區的位置將前移 n,其中 n 為此方法返回的值;輸出緩衝區的限制並未改變。
如果 output.remaining()
個位元組還不夠保存該結果,則拋出 ShortBufferException
。
如果能夠比 byte 陣列更有效地處理 ByteBuffer,子類別應考慮覆寫此方法。
input
- 輸入 ByteBufferoutput
- 輸出 ByteBuffer
output
中存儲的位元組數
ShortBufferException
- 如果輸出緩衝區中沒有足夠的空間
NullPointerException
- 如果任一參數為 null
protected abstract byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException, BadPaddingException
處理 input
緩衝區中從 inputOffset
開始(包含)的前 inputLen
個位元組以及可能在上一次 update
操作過程中已快取記憶體的任何輸入位元組,其中應用了填充(如果需要)。結果存儲在新緩衝區中。
結束時,此方法將把此 cipher 物件重置為上一次調用 engineInit
初始化得到的狀態。即重置該物件,可供加密或解密(取決於調用 engineInit
時指定的操作網要)更多的資料。
註:如果拋出了任何異常,則再次使用此 cipher 物件前,可能需要將其重置。
input
- 輸入緩衝區inputOffset
- input
中輸入開始位置的偏移量inputLen
- 輸入長度
IllegalBlockSizeException
- 如果此 cipher 為塊 cipher,未請求任何填充(只針對加密網要),並且由此 cipher 處理的資料總輸入長度不是塊大小的倍數,如果此加密演算法無法處理所提供的輸入資料。
BadPaddingException
- 如果此 cipher 為解密網要,並且未請求填充或不填充,但解密的資料沒有用適當的填充位元組所限制protected abstract int engineDoFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
處理 input
緩衝區中從 inputOffset
開始(包含)的前 inputLen
個位元組以及可能在上一次 update
操作過程中已快取記憶體的任何輸入位元組,其中應用了填充(如果需要)。結果存儲在 output
緩衝區中從 outputOffset
(包含)開始的位置。
如果 output
緩衝區太小無法保存該結果,則拋出 ShortBufferException
。
結束時,此方法將把此 cipher 物件重置為上一次調用 engineInit
初始化得到的狀態。即重置該物件,可供加密或解密(取決於調用 engineInit
時指定的操作網要)更多的資料。
註:如果拋出了任何異常,則再次使用此 cipher 物件前,可能需要將其重置。
input
- 輸入緩衝區inputOffset
- input
中輸入開始位置的偏移量inputLen
- 輸入長度output
- 保存結果的緩衝區outputOffset
- output
中存儲結果的位置的偏移量
output
中存儲的位元組數
IllegalBlockSizeException
- 如果此 cipher 為塊 cipher,未請求任何填充(只針對加密網要),並且由此 cipher 處理的資料總輸入長度不是塊大小的倍數,如果此加密演算法無法處理所提供的輸入資料。
ShortBufferException
- 如果給定的輸出緩衝區太小無法保存結果
BadPaddingException
- 如果 cipher 為解密網要,並且未請求填充或不填充,但解密的資料沒有用適當的填充位元組所限制protected int engineDoFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException
處理從 input.position()
開始的所有 input.remaining()
位元組。結果存儲在輸出緩衝區中。返回時,輸入緩衝區的位置將等於其限制;其限制並未改變。輸出緩衝區的位置將前移 n,其中 n 為此方法返回的值;輸出緩衝區的限制並未改變。
如果 output.remaining()
個位元組還不夠保存該結果,則拋出 ShortBufferException
。
結束時,此方法將把此 cipher 物件重置為上一次調用 engineInit
初始化得到的狀態。即重置該物件,可供加密或解密(取決於調用 engineInit
時指定的操作網要)更多的資料。
註:如果拋出了任何異常,則再次使用此 cipher 物件前,可能需要將其重置。
如果能夠比 byte 陣列更有效地處理 ByteBuffer,子類別應考慮覆寫此方法。
input
- 輸入 ByteBufferoutput
- 輸出 ByteBuffer
output
中存儲的位元組數
IllegalBlockSizeException
- 如果此 cipher 為塊 cipher,未請求任何填充(只針對加密網要),並且由此 cipher 處理的資料總輸入長度不是塊大小的倍數,如果此加密演算法無法處理所提供的輸入資料。
ShortBufferException
- 如果輸出緩衝區沒有足夠的空間
BadPaddingException
- 如果 cipher 為解密網要,並且未請求填充或不填充,但解密的資料沒有用適當的填充位元組所限制
NullPointerException
- 如果任一參數為 null
protected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException
已將此具體方法添加到了先前定義過的抽象類別中。(為向後相容,它不能為抽象方法)。可以由提供者覆寫以包裹該密鑰。如果給定的密鑰無法被包裹,則這樣的覆寫可能會拋出 IllegalBlockSizeException 或 InvalidKeyException (在指定情況下)。如果不覆寫此方法,則它總是拋出 UnsupportedOperationException。
key
- 要包裹的密鑰。
IllegalBlockSizeException
- 如果此 cipher 為塊 cipher,未請求填充,並且要包裹的密鑰的編碼長度不是塊大小的倍數。
InvalidKeyException
- 如果不可能用此 cipher 套件裝該密鑰,或這樣做不安全(例如,將一個硬體保護的密鑰傳給只要求軟體保護的 cipher)。protected Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException
已將此具體方法添加到了先前定義過的抽象類別中。(為向後相容,它不能為抽象方法)。可以由提供者覆寫以打開以前包裹的密鑰。如果無法打開給定的套件裝密鑰,則這樣的覆寫可能會拋出 InvalidKeyException。如果不覆寫此方法,則它總是拋出 UnsupportedOperationException。
wrappedKey
- 要打開的密鑰。wrappedKeyAlgorithm
- 與此套件裝密鑰關聯的演算法。wrappedKeyType
- 已包裹密鑰的型別。此型別為 SECRET_KEY
、PRIVATE_KEY
或 PUBLIC_KEY
之一。
NoSuchAlgorithmException
- 如果沒有一個已安裝的提供者能夠為 wrappedKeyAlgorithm
創建型別為 wrappedKeyType
的密鑰。
InvalidKeyException
- 如果 wrappedKey
並不為 wrappedKeyAlgorithm
表示型別為 wrappedKeyType
的已包裹密鑰。protected int engineGetKeySize(Key key) throws InvalidKeyException
已將此具體方法添加到了先前定義過的抽象類別中。如果提供者未覆寫此方法,則將拋出 UnsupportedOperationException
。
key
- 密鑰物件
InvalidKeyException
- 如果 key
無效。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。