2

暗号化された (短い) 情報を Cookie に保存しようとしています。短い文字列 (約 64 文字) を生成し、generateSecretKey() を使用してキーを生成し、AES または Blowfish 暗号化を試みています。

encode() および decode() 関数のパラメータを使用して、デフォルトの UUEncoding、Base64、および Hex を試しました。

AESを使用すると、エラーが発生します

入力文字列の暗号化または復号化中にエラーが発生しました: com.rsa.jsafe.crypto.dr: パディング解除を実行できませんでした: パッド バイトが無効です..

Blowfish では、エラーが発生します

入力文字列の暗号化または復号化中にエラーが発生しました: 最終ブロックが適切に埋め込まれていません。

私は何を間違っていますか?

4

3 に答える 3

4

Blowfishのブロック サイズは 64 ビット、つまり 8 バイトです。AESのブロック サイズは 128 ビット、つまり 16 バイトです。

ブロックサイズは、そのサイズのブロックしか実行できないことを意味します。したがって、ブロックサイズが 8 バイトのものは、7、6、5、4、3、2、1 バイトを処理できません。

必要なビット数またはバイト数 (ここでは 8 および 16 バイト) よりも少ない場合は、8/16 バイト長のブロックに到達するために何かを埋め込む必要があります。(英語でのパディングとは、未使用のビット/バイトを追加する必要があることを意味します。必要なサイズになるまで、プロトコル/アルゴリズムによって規定されたコンテンツの場合もあれば、コンテンツが問題にならない場合もあります)。

どちらのエラーも、パディングが悪いことを訴えています。したがって、正しいサイズ (長さ) のデータを暗号化/復号化アルゴリズムに渡していないというのが私の推測です。ドキュメントをチェックして、入力データとして受け入れられるかどうかを確認してください。

  • 正確に 1 ブロック (ここでは 8 または 16 バイト)
  • ブロックサイズの正確な倍数 (= この場合、パディングを行う必要があります)
  • 任意のサイズのデータ​​ (= パディングを行う必要はありません - しかし、そもそもなぜエラーが発生したのですか?)

暗号化ステップの前にUU/Base64/Hex エンコーディングを誤って実行してしまった可能性はありますか?

あなたがすべき:

  • 最初に暗号化を行い、
  • 次に、UU/Base64/Hex エンコーディング、
  • 次に、データを送信します。

明らかに、データの受信時にシーケンスを逆にします。

  • 最初の UU/Base64/Hex デコード、
  • 次に復号化し、
  • その後、データを使用します。
于 2010-01-22T19:56:39.493 に答える
1

どのバージョンを使用しているかはわかりませんが、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#<br />
    Key: #key#<br />
    Encrypted:  #encrypted# <br />

    <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# <br />
        form.key = #key# <br />
        cookie.secretValue = #cookie.secretValue# <br />
        decrypted = #decrypted# <br />
    </cfoutput>
</cfif>
于 2010-01-25T05:58:10.913 に答える
0

時間の制約により、cfmx_copat 暗号化を使用することになりました。

回答してくださった両方の方に申し訳ありません。

于 2010-02-09T16:57:17.347 に答える