ColdFusion 加密 URL : 解密 Return URL

ColdFusion Encrypt a URL : Decrypt Return URL

我正在寻找加密验证电子邮件。

所以一个用户注册了:然后发送给“bob@bobemail.com”

我想加密 return link。我们会说它创建了这个“HKDLEK6798JKJK”

因此它向 BOB 发送电子邮件:可点击 link 的“http://website.com?urlem=HKDLEK6798JKJK”

当他点击 return link。我想将它解密回“bob@bobemail.com”

      <cfset key = generateSecretKey("AES") />

      <!--- Set the ciphertext to a variable. This is the string you will store for later deciphering --->
      <cfset cipherText = encrypt(em, key, "AES/CBC/PKCS5Padding", "HEX") />

      <cfoutput>#cipherText#</cfoutput> 

创建“HKDLEK6798JKJK”(我知道的更多)

当 link 返回时,我正在尝试:(返回 URL 或设置相同)

      <cfset urlem = "HKDLEK6798JKJK">

      <cfoutput>#urlem#</cfoutput>
      <br><br>

      <cfset urld = decrypt(urlem, key, "AES/CBC/PKCS5Padding", "HEX") />

      <cfoutput>[#urld#]</cfoutput>

URLD 要么是空白,要么出现错误:错误:尝试加密或解密输入字符串时出错:给定的最终块未正确填充。

AES 是一种对称密钥算法,因此您只需创建一次密钥,然后将其作为秘密存储在您的配置中(例如在 APPLICATION范围)。如果密钥更改,您将无法再解密任何以前加密的数据。

第 1 步

使用 <cfoutput>#generateSecretKey("AES")#</cfoutput> 创建 AES 密钥。无需在您的代码库中的任何位置添加此行,因为您可能永远不会更改此密钥(至少对于此 Web 应用程序而言)。

生成的密钥是16字节(128位)的随机组合,编码为Base64字符串。 ColdFusion 通常从不期望字节数组,因此您可以使用 encryptdecrypt 的编码值。它可能看起来像这样: k1+pzMg/rqmbVGfI5MOf8Q== 注意到 +/ 了吗?这些是 Base64 的一部分,无需担心,但我总是建议您滚动直到获得“漂亮”的字符串以进行复制和粘贴,例如:YncQUYZYdPez360xNmq2tw==

第 2 步

将生成的密钥作为其 Base64 编码值存储在您的 Web 应用程序配置中。如果你有一个 Application.cfc,你可以把它写在 onApplicationStart 函数中。或者如果你还有一个Application.cfm,直接写下来:

<cfset APPLICATION.AesKeyForMails = "YncQUYZYdPez360xNmq2tw==">

当然,你也可以只<cfinclude>一个带有变量的配置文件(那时候不要使用APPLICATION)。最适合你的。

步骤 3

使用存储的密钥加密电子邮件:

<cfset encryptedMail = encrypt("bob@bobemail.com", APPLICATION.AesKeyForMails, "AES/CBC/PKCS5Padding", "HEX")>

这将return加密数据(字节数组)并将其表示为HEX编码的字符串,例如:A0E2D61277EE1966CDD571B25A8B088E81AF7953B52BBE086C5079A8565D3D718DC572474A0C7DEF5BFC2F8F90CC464B

请注意,由于块链接(CBC 模式),此值将随每次调用而变化。不过不用担心,所有这些都可以用同样的方式解密。 (如果你只指定算法参数AES,它使用ECB模式,总是return得到相同的结果,这被认为不太安全。)

第 4 步

使用存储的密钥解密加密的电子邮件:

<cfset decryptedMail = decrypt("A0E2D61277EE1966CDD571B25A8B088E81AF7953B52BBE086C5079A8565D3D718DC572474A0C7DEF5BFC2F8F90CC464B", APPLICATION.AesKeyForMails, "AES/CBC/PKCS5Padding", "HEX")>

我们开始了:bob@bobemail.com