The function GeneratePBKDFKey may not work as expected with JDK 11.0.17. As a workaround, edit the java.security file located in ColdFusion/jre/<path_to_conf_folder>/security/ or \Program Files\Java\jdk-11\conf\security, and remove the string - SHA1 denyAfter 2019-01-01.
Restart ColdFusion after the changes.
GeneratePBKDFKey has been added in ColdFusion 11 to allow users to support PBKDF2 key derivation.
Returns
A string that contains the encryption key.
History
ColdFusion 11: Added this function
Category
Security functions, String functions
Function syntax
GeneratePBKDFKey(String algorithm, String string, String salt, int iterations, int keysize )
Parameters
Parameter |
Description |
algorithm |
The encryption algorithm for which to generate the key. The following algorithms are available in both standard and enterprise versions:
The following algorithms are available only in enterprise versions. Note: For the workaround at the beginning of the document, the following algorithms are supported.
ColdFusion Enterprise registers JSAFE as the default crypto provider. JSAFE provides the additional algorithms. |
string |
The string to be used for conversion. |
salt |
A random salt. The standard recommends a salt length of at least 64 bits (8 characters). The salt needs to be generated using a pseudo-random number generator (e.g SHA1PRNG). |
iterations |
The number of PBKDEF iterations to perform. The recommended value for iterations is 1000 or more. |
keysize |
The key size in number of bits. |
Example
ENCRYPTION USING PBKDF2
<cfscript> salt="A41n9t0Q"; password = "Password@123"; PBKDFalgorithm = "PBKDF2WithSHA512-224"; dataToEncrypt= "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"; encryptionAlgorithm = "AES"; derivedKey = GeneratePBKDFKey(PBKDFalgorithm ,password ,salt,4096,128); writeOutput("Generated PBKDFKey (Base 64) : " & derivedKey); encryptedData = encrypt(dataToEncrypt, derivedKey, encryptionAlgorithm, "BASE64"); writeoutput("Data After Encryption using PBKDF2: " & encryptedData); </cfscript>
Decryption using PBKDF2
<cfscript> salt="A41n9t0Q"; password = "Password@123"; PBKDFalgorithm = "PBKDF2WithSHA512-224"; derivedKey = GeneratePBKDFKey(PBKDFalgorithm ,password ,salt,4096,128); decryptedData = decrypt(encryptedData, derivedKey, encryptionAlgorithm, "BASE64"); writeoutput("Data After Decryption using PBKDF2: " & decryptedData); </cfscript>