【问题标题】:ColdFusion Encrypt a URL : Decrypt Return URLColdFusion 加密 URL:解密返回 URL
【发布时间】:2021-03-10 19:56:25
【问题描述】:

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

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

我想加密返回链接。我们会说它创建了这个“HKDLEK6798JKJK”

所以它通过电子邮件发送给 BOB:“http://website.com?urlem=HKDLEK6798JKJK”的可点击链接

当他点击返回链接时。我想把它解密回“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”(我知道它更多)

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

      <cfset urlem = "HKDLEK6798JKJK">

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

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

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

URLD 为空白或出现错误:错误:尝试加密或解密您的输入字符串时出错:未正确填充最终块。

【问题讨论】:

  • 你是否使用相同的密钥进行解密和加密,你是否将encrypt返回的内容传递给decrypt

标签: encryption coldfusion coldfusion-2016


【解决方案1】:

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

第一步

使用&lt;cfoutput&gt;#generateSecretKey("AES")#&lt;/cfoutput&gt; 创建一个 AES 密钥。无需在您的代码库中的任何地方都有此行,因为您可能永远不会更改此密钥(至少对于此 Web 应用程序而言)。

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

第 2 步

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

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

当然,您也可以只使用&lt;cfinclude&gt; 一个带有变量的配置文件(然后不要使用APPLICATION)。无论哪种方式最适合您。

第三步

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

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

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

请注意,由于块链接(CBC 模式),该值会随着每次调用而改变。但别担心,它们都可以用同样的方式解密。 (如果只为算法参数指定AES,它使用ECB模式,总是返回相同的结果,这被认为不太安全。)

第四步

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

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

我们去吧:bob@bobemail.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2021-06-10
    • 1970-01-01
    相关资源
    最近更新 更多