Skip to content

Instantly share code, notes, and snippets.

Created June 10, 2015 11:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/36a929d67b1a95897667 to your computer and use it in GitHub Desktop.
Save anonymous/36a929d67b1a95897667 to your computer and use it in GitHub Desktop.
TryCF Gist
<cffunction access="public" name="prepare3DESKey" returntype="string" output="false" hint="Prepare 3DES key for encryption.">
<cfargument name="key" type="string" default="" />
<cfif len(key) eq 0>
<cfset key = generateSecretKey('DESEDE') />
<cfelse>
<!--- if key is lower than 24 bytes; fill the empty bytes with NULL --->
<cfloop from="#len(key)#" to="23" index="i">
<!--- do NOT use chr(0). in CF it does not work --->
<cfset key = key & urlDecode('%00') />
</cfloop>
</cfif>
<cfreturn key />
</cffunction>
<cfset key="#prepare3DESKey('62v01fVsCWHfRcW')#" />
<cfdump var="#len(key)#" />
<cfdump var="#key#" />
<cffunction access="public" name="encrypt3DESCBC" returntype="string" output="false" hint="Encrypts a string based on a given key and initialization vector, using CF methods.">
<cfargument name="encrypting" type="string" required="true" />
<cfargument name="key" type="string" default="" />
<cfargument name="iv" type="string" default="0000000000000000" />
<cfreturn encrypt(
encrypting,
toBase64(prepare3DESKey(key)),
'DESEDE/CBC/PKCS5Padding',
'Base64',
BinaryDecode(iv, 'Hex')
) />
</cffunction>
<cffunction access="public" name="encrypt3DESCBC_Java" returntype="string" output="false" hint="Encrypts a string based on a given key and initialization vector, using Java functionality.">
<cfargument name="encrypting" type="string" required="true" />
<cfargument name="key" type="string" default="" />
<cfargument name="iv" type="string" default="0000000000000000" />
<cfset iv = BinaryDecode(iv, 'Hex') />
<cfset Cipher = createObject('java', 'javax.crypto.Cipher') />
<cfset jcipher = Cipher.getInstance("DESede/CBC/PKCS5Padding") />
<cfset IvParameterSpec = createObject('java', 'javax.crypto.spec.IvParameterSpec') />
<cfset jiv = IvParameterSpec.init(iv) />
<cfset SecretKeySpec = createObject('java', 'javax.crypto.spec.SecretKeySpec') />
<cfset jkey = SecretKeySpec.init(
prepare3DESKey(key).getBytes(),
"DESede"
) />
<cfset jcipher.init(Cipher.ENCRYPT_MODE, jkey, jiv) />
<cfreturn toBase64(jcipher.doFinal(
encrypting.getBytes()
)) />
<cfreturn "test" />
</cffunction>
<cfdump var="#encrypt3DESCBC('66866996699', '62v01fVsCWHfRcW')#" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment