SHA1 und ColdFusion 6.1
Der SHA1-Algorithmus kann bei älteren ColdFusion Versionen nicht direkt verwendet werden um einen Hash-String zu erzeugen. Deshalb verwendete ich bis anhin die SHA1-Implementierung von Rob Brooks-Bilson von CFlib.org. Diese Implementierung basiert auf dem CustomTag Code von Tim McCarthy. Heute bin ich über einen bemerkenswerten Fehler in dieser Implementierung gestolpert: Lustigerweise wird bei einer Message-Länge von 55 Zeichen ein falscher Hash-String generiert.
Der folgende Code
2<cfoutput>#sha1(str)#</cfoutput>
erzeugt diese Ausgabe:
Nutzt man unter ColdFusion 9 die hash-Funktion, so erscheint ein anderer Hashwert. Da erzeugt der Code
2<cfoutput>#hash(str,"SHA")#</cfoutput>
auf magische (aber korrekte) Art und Weise die folgende Ausgabe:
Unglücklicherweise kann bei zu alten ColdFusion-Versionen nicht auf die hash-Funktion zurückgegriffen werden. Der optionale Parameter für den Algorithmus wurde erst in der Version 7 hinzugefügt. Für ColdFusion ab Version 6 schafft zumindest Railo abhilfe.
Von dort kann die korrekt arbeitende Java Klasse railo.runtime.crypt.SHA1 extrahiert und als Hotfix eingebunden werden. Innerhalb von ColdFusion kann dann ganz einfach auf die Java-Klasse zurückgegriffen werden:
2<cfset jSHA1 = createObject("java","railo.runtime.crypt.SHA1") />
3<cfset jSHA1.update(javaCast("string",str)) />
4<cfset jSHA1.finalize() />
5<cfoutput>#uCase(jSHA1.toString())#</cfoutput>