首页 文章

ColdFusion的加密问题

提问于
浏览
2

我正在尝试将一些加密(短)信息存储在cookie中 . 我正在生成一个短字符串(大约64个字符),使用generateSecretKey()生成密钥,并尝试AES或Blowfish加密 .

我已经使用encode()和decode()函数中的参数尝试了默认的UUEncoding,Base64和Hex .

使用AES,我收到错误

尝试加密或解密输入字符串时发生错误:com.rsa.jsafe.crypto.dr:无法执行取消填充:无效的填充字节..

有了Blowfish,我收到了错误

尝试加密或解密输入字符串时发生错误:给定最终块未正确填充 .

我究竟做错了什么?

3 回答

  • 1

    Blowfish具有64位块大小,即8个字节 . AES的块大小为128位,即16字节 .

    块大小意味着它只能执行那些大小的块 . 所以块大小为8字节的东西不能做7,6,5,4,3,2,1字节 .

    如果你有少于所需的位数或字节数(这里是8和16字节),你必须 pad 那些有东西到达8/16字节长的块 . (填充英文意味着您必须附加未使用的位/字节 - 有时是协议/算法规定的内容,有时内容无关紧要),直到您拥有所需大小的内容 . )

    两个错误都抱怨填充不良 . 所以我的预感是你没有将正确大小(长度)的数据传递给加密/解密算法 . 检查您的文档以查看它们是否接受输入数据:

    • 恰好一个块(这里是8或16个字节)

    • 块大小的精确倍数(=在这种情况下,您将不得不进行填充)

    • 任意大小的数据(=你不必做填充 - 但是为什么你得到错误开始?)

    您是否有可能在加密步骤之前意外地完成了UU / Base64 / Hex编码?

    你应该:

    • 首先进行加密,

    • 然后是UU / Base64 / Hex编码,

    • 然后发送数据 .

    显然,在收到数据后反转序列:

    • 第一个UU / Base64 / Hex解码,

    • 然后解密,

    • 然后使用数据 .

  • 0

    我不确定您使用的是哪个版本,但这似乎可以与CF9,OpenBD和Railo(使用AES或Blowfish)一起使用

    <!--- create an encrypted cookie --->
    <cfset text = "testing, 1, 2, 3" >
    <cfset key = generateSecretKey("AES")>
    <cfset encrypted = encrypt(text, key, "AES", "hex")>
    <cfcookie name="secretValue" value="#encrypted#">
    
    <!--- display test values used--->
    <form method="post">
        DEBUG:<hr />
        <cfoutput>
        Text: #text#
    Key: #key#
    Encrypted: #encrypted#
    <input type="hidden" name="text" value="#text#"> <input type="hidden" name="key" value="#key#"> <input type="submit" value="Decrypt Cookie"> </cfoutput> </form> <!--- decrypt test values ---> <cfif structKeyExists(FORM, "key") AND structKeyExists(COOKIE, "secretValue")> <cfset decrypted = decrypt(cookie.secretValue, key, "AES", "hex") > <cfoutput> form.text = #text#
    form.key = #key#
    cookie.secretValue = #cookie.secretValue#
    decrypted = #decrypted#
    </cfoutput> </cfif>
  • 4

    由于时间限制,我们最终使用cfmx_copat加密 .

    我向两个回答的人道歉,因为我从来没有像我希望的那样充分地试验他们的回答 .

相关问题