ENCRYPT_TDES
ENCRYPT_TDES 函數會傳回使用三重 DES 加密演算法來加密 data-string 的結果值。 用於解密的密碼是 password-string 值或加密密碼值 (由 SET ENCRYPTION PASSWORD 陳述式指派)。
- 資料字串
- 傳回要加密的字串值的表示式。 字串表示式必須是內建字串資料類型。
資料類型 資料字串 的長度屬性必須小於 分鐘 -MOD (分鐘, 8)- n -1 ,其中 分鐘 是結果資料類型的長度上限, n 是加密值所需的額外負擔量。
- password-string
- 傳回至少 6 個位元組且不超過 127 個位元組的字串值的表示式。 表示式不能是 CLOB ,且表示式的 CCSID 不能是 65535。 該值代表用來加密 data-string的密碼。 如果密碼引數的值是空值或未提供,則會使用 ENCRYPTION PASSWORD 值來加密資料,該值必須已使用 SET ENCRYPTION PASSWORD 陳述式來設定。
- hint-string
- 傳回最多包含 32 個位元組的字串值的表示式,可協助資料擁有者記住密碼 (例如, 'Ocean '是要記住' Pacific ' 的提示)。 表示式不能是 CLOB ,且表示式的 CCSID 不能是 65535。 如果指定提示值,則提示會內嵌在結果中,且可以使用 GETHINT 函數來擷取。 如果指定 password-string ,且此引數是空值或未提供,則不會在結果中內嵌任何提示。 如果未指定 password-string ,則可以使用 SET ENCRYPTION PASSWORD 陳述式來指定提示。
結果的資料類型由第一個引數決定,如下表所示:
| 第一個引數的資料類型 | 結果的資料類型 |
|---|---|
| BINARY 或 VARBINARY | VARBINARY |
| CHAR、VARCHAR、GRAPHIC 或 VARGRAPHIC | 位元資料的 VARCHAR |
| BLOB、CLOB 或 DBCLOB | BLOB |
結果的長度屬性取決於指定的引數:
- 指定 password-string 但未指定 hint-string 時, data-string 的長度屬性加上 24 加上 8 位元組界限的位元組數。
- 否則, data-string 的長度屬性加上 56 加上 8 位元組界限的位元組數。
- data-string 的實際長度加上要達到 8 位元組界限的位元組數。
- 提示的實際長度。
如果未將 hint-string 指定為函數引數或在 SET ENCRYPTION PASSWORD 陳述式上指定,則提示的實際長度為零。
- n,其中 n (加密值所需的額外負擔量) 是 16 個位元組 (如果 資料字串 是 LOB 或不同的 CCSID 值用於 資料字串、密碼或提示,則為 24 個位元組)。
若引數可能為空值,結果就可能為空值;若引數是空值,結果就是空值。
請注意,加密結果的長度超過 data-string 值。 因此,在指派加密值時,請確定目標宣告的大小足以包含整個加密值。
附註
密碼保護: 若要防止無意中存取加密密碼,請不要在程式、程序或函數的來源中指定 password-string 作為字串常數。 請改用 SET ENCRYPTION PASSWORD 陳述式或主變數或廣域變數。
連接至遠端關聯式資料庫時,強烈建議使用 TLS 連線來保護密碼。 如果沒有 TLS ,加密密碼會以「明碼」傳送。 也就是說,密碼本身未加密。
加密演算法: 使用的內部加密演算法是具有填補的三重 DES 區塊密碼, 128 位元秘密金鑰衍生自使用 SHA1 訊息摘要的密碼。
加密密碼和資料: 使用者負責執行密碼管理。 資料加密之後,只能使用用來加密的密碼來解密資料。 使用 CHAR 變數來設定密碼值時請小心,因為它們可能會以空白填補。 加密結果可能包含空值終止符及其他不可列印的字元。
表格直欄定義: 定義直欄及特殊類型以包含加密資料時:
- 直欄必須以 CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY、VARBINARY 或 BLOB 資料類型來定義。
- 直欄的長度屬性必須包含額外的 n 個位元組,其中 n 是如上所述加密資料所需的額外負擔。
任何指派或強制轉型至沒有這些資料類型的直欄,或長度短於建議資料長度的直欄,可能會導致指派錯誤,或者如果指派成功,則會在資料隨後解密時失敗並遺失資料。 空白是有效的已加密資料值,當儲存在太短的直欄時可能會截斷。
部分範例直欄長度計算:
Maximum length of non-encrypted data 6 bytes
Number of bytes to the next 8 byte boundary 2 bytes
Overhead 16 bytes (or 24 bytes)
--------
Encrypted data column length 24 bytes (or 32 bytes)
Maximum length of non-encrypted data 32 bytes
Number of bytes to an 8 byte boundary 0 bytes
Overhead 16 bytes (or 24 bytes)
--------
Encrypted data column length 48 bytes (or 56 bytes)管理加密資料: 加密資料只能在支援對應於 ENCRYPT_TDES 函數之解密函數的伺服器上解密。 因此,應該只對支援解密功能的伺服器執行具有已加密資料的直欄抄寫。
範例
- 假設表格 EMP1 具有稱為 SSN 的社會保險直欄。 此範例使用 ENCRYPTION PASSWORD 值來保留加密密碼。
SET ENCRYPTION PASSWORD = 'Ben123' INSERT INTO EMP1 (SSN) VALUES ENCRYPT_TDES( '289-46-8832' ) - 此範例明確地傳遞加密密碼。
INSERT INTO EMP1 (SSN) VALUES ENCRYPT_TDES( '289-46-8832', 'Ben123' ) - 會儲存提示 'Ocean' ,以協助使用者記住加密密碼 'Pacific'。
INSERT INTO EMP1 (SSN) VALUES ENCRYPT_TDES( '289-46-8832', 'Pacific', 'Ocean' )
