|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
java.lang.Objectjavax.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。