DECRYPT_BIT、DECRYPT_BINARY、DECRYPT_CHAR 及 DECRYPT_DB
DECRYPT_BIT、DECRYPT_BINARY、DECRYPT_CHAR 及 DECRYPT_DB 函數會傳回解密已加密資料的結果值。 用於解密的密碼是 password-string 值,或 SET ENCRYPTION PASSWORD 陳述式指派的 ENCRYPTION PASSWORD 值。
解密函數只能解密使用 ENCRYPT_AES、
ENCRYPT_AES256,
ENCRYPT_RC2或 ENCRYPT_TDES 函數加密的值。
- encrypted-data
- 此表示式必須是字串表示式,可傳回 CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY、VARBINARY 或 BLOB 內建資料類型的完整加密資料值。 資料字串必須已使用 ENCRYPT_AES、
ENCRYPT_AES256,
ENCRYPT_RC2或 ENCRYPT_TDES 函數進行加密。 - password-string
- 傳回至少 6 個位元組且不超過 127 個位元組的字串值的表示式。 表示式不能是 CLOB。 此表示式必須是用來加密資料的相同密碼,否則 解密會產生與原始加密值不同的值。 如果密碼引數的值是空值或未提供,則會使用 ENCRYPTION PASSWORD 值來解密資料,該值必須已使用 SET ENCRYPTION PASSWORD 陳述式設定。
- 預設
- 將使用 ENCRYPTION PASSWORD 值將資料解密,該值必須已使用 SET ENCRYPTION PASSWORD 陳述式設定。
- 整數
- 整數常數,指定結果的 CCSID。 如果指定 DECRYPT_BIT 或 DECRYPT_BINARY ,則不得指定第三個引數。
如果指定 DECRYPT_CHAR ,則 integer 必須是有效的 SBCS CCSID 或混合資料 CCSID。 它不能是 65535 (位元資料)。 如果第三個引數是 SBCS CCSID ,則結果是 SBCS 資料。 如果第三個引數是混合的 CCSID ,則結果是混合資料。 如果未指定第三個引數,則結果的 CCSID 是現行伺服器的預設 CCSID。
如果指定 DECRYPT_DB ,則 integer 必須是有效的 DBCS CCSID。 如果未指定第三個引數,則結果的 CCSID 是與現行伺服器的預設 CCSID 相關聯的 DBCS CCSID。
結果的資料類型由指定的函數及第一個引數的資料類型決定,如下表所示。 如果不支援從實際加密資料類型到函數結果的強制轉型,則會傳回警告或錯誤。
| 功能 | 第一個引數的資料類型 | 加密資料的實際資料類型 | 結果 |
|---|---|---|---|
| DECRYPT_BIT | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | 字串 (character string) | 位元資料的 VARCHAR |
| DECRYPT_BIT | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | 圖形字串 (graphic string) | 錯誤或警告 ** |
| DECRYPT_BIT | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | 二進位字串 (binary string) | 錯誤或警告 ** |
| DECRYPT_BIT | BLOB | 任何字串 | 錯誤 |
| DECRYPT_BINARY | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | 任何字串 | VARBINARY |
| DECRYPT_BINARY | BLOB | 任何字串 | BLOB |
| DECRYPT_CHAR | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | 字串 (character string) | VARCHAR |
| DECRYPT_CHAR | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | Unicode 圖形字串 | VARCHAR |
| DECRYPT_CHAR | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | 非 Unicode 圖形字串 | 錯誤或警告 ** |
| DECRYPT_CHAR | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | 二進位字串 (binary string) | 錯誤或警告 ** |
| DECRYPT_CHAR | BLOB | 字串 (character string) | CLOB |
| DECRYPT_CHAR | BLOB | Unicode 圖形字串 | CLOB |
| DECRYPT_CHAR | BLOB | 非 Unicode 圖形字串 | 錯誤或警告 ** |
| DECRYPT_CHAR | BLOB | 二進位字串 (binary string) | 錯誤或警告 ** |
| DECRYPT_DB | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | UTF-8 字串或圖形字串 | VARGRAPHIC |
| DECRYPT_DB | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | Non-UTF-8 字串 | 錯誤或警告 ** |
| DECRYPT_DB | CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY 或 VARBINARY | 二進位字串 (binary string) | 錯誤或警告 ** |
| DECRYPT_DB | BLOB | UTF-8 字串或圖形字串 | DBCLOB |
| DECRYPT_DB | BLOB | Non-UTF-8 字串 | 錯誤或警告 ** |
| DECRYPT_DB | BLOB | 二進位字串 (binary string) | 錯誤或警告 ** |
附註:
** 如果解密函數位於外部次選取的選取清單中,則會傳回資料對映警告。 否則會傳回錯誤。 如需資料對映警告的相關資訊,請參閱 指派和比較。 |
|||
如果 encrypted-data 包含提示,函數不會傳回提示。 結果的長度屬性是 encrypted-data 之資料類型的長度屬性減去 8 個位元組。 結果的實際長度是已加密原始字串的長度。 如果 encrypted-data 包含加密字串以外的位元組,則函數不會傳回這些位元組。
若引數可能為空值,結果就可能為空值;若引數是空值,結果就是空值。
如果使用不同於原始加密值的 CCSID 來解密資料,則在將解密值轉換成此 CCSID 時可能會發生擴充。 在這種情況下, encrypted-data 應該強制轉型為具有較大位元組數的可變長度字串。
附註
密碼保護: 若要防止無意中存取加密密碼,請不要在程式、程序或函數的來源中指定 password-string 作為字串常數。 請改用 SET ENCRYPTION PASSWORD 陳述式或主變數或廣域變數。
連接至遠端關聯式資料庫時,強烈建議使用 TLS 連線來保護密碼。 如果沒有 TLS ,加密密碼會以「明碼」傳送。 也就是說,密碼本身未加密。
替代語法: 為了與舊版 Db2®相容,可以指定 DECRYPT_BIN 來取代 DECRYPT_BIT。
範例
- 假設表格 EMP1 具有稱為 SSN 的社會保險直欄。 此範例使用 ENCRYPTION PASSWORD 值來保留加密密碼。
DECRYPT_CHAR 函數會傳回原始值 '289-46-8832'。SET ENCRYPTION PASSWORD = :pw INSERT INTO EMP1 (SSN) VALUES ENCRYPT_RC2( '289-46-8832' ) SELECT DECRYPT_CHAR( SSN) FROM EMP1 - 此範例明確傳遞已在變數 pw 中設定的加密密碼。
DECRYPT_CHAR 函數會傳回原始值 '289-46-8832'。INSERT INTO EMP1 (SSN) VALUES ENCRYPT_TDES( '289-46-8832', :pw) SELECT DECRYPT_CHAR( SSN, :pw) FROM EMP1
