0

ユーザーがクリックする暗号化されたリンクを送信する電子メール検証システムがあります。1 人のユーザーに、それが機能していないと言われたのですが、説明できない非常に奇妙なエラーが見つかりました。

これは正常に動作するローカル URL です

http://localhost/cypher.action?cypher=TphMFuv%2FwcsgLThnU5cWInJFaZPMHeDFFL%2FRRPbbV70%3D

これは機能しないリモート URL です

http://remotehost/cypher.action?cypher=TphMFuv%2FwcsgLThnU5cWInJFaZPMHeDFFL%2FRRPbbV70%3D

私のアプリケーションは tomcat サーバーで struts2 を実行していますが、それは問題ではないと思います。リモート要求では、変数 cypher は null です。理由がわかりません。まったく同じコードを実行しています

乾杯

クリス

アップデート

悪いロギングが本当の問題を隠していたことが判明しました。問題は、サーバー上で BadPaddingException が発生していることです。

javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at service.DesEncrypterService.decrypt(DesEncrypterService.java:80)
at action.LoginAction.cypherLogin(LoginAction.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

なぜそれがローカルではなくサーバーで起こっているのかを調べるために

アップデート

この人がLinuxで例外:「与えられた最終ブロックが適切に埋め込まれていない」を持っているのと同様の問題のようですが 、Windowsでは機能します

Linux でのエンコーディングの違いはありますか?

4

2 に答える 2

0

設定する前に、暗号化されたキーの URL エンコードを実行します。これにより、余分な文字の追加が回避されます。

于 2012-09-28T04:25:26.143 に答える
0

2 つのマシンでキーが異なります。違いがどこで生成されているかを特定できるように、両方のマシンでキー処理を追跡する必要があります。バイト間の一致を常にチェックします。文字の一致は誤解を招く可能性があります。たとえば、行末は、異なるシステム間で目に見えないほど異なる場合があります。

最初に、送信後に受信したものが正確に送信されたものであることを確認してください。次に、シリアル化されたキー/パラメーターの各処理の後に、バイト ダンプをログに記録します。これをホームマシンとアウェイマシンの両方で行い、比較します。これにより、「両方のマシンで同じ」から「マシン間で異なる」への変更がどこで発生するかが特定されます。これにより、問題が発生しているメソッドまたはコード セクションが特定されるはずです。問題が切り分けられるまで、そのコード内のバイト ダンプを繰り返します。繰り返しになりますが、両方のマシンでダンプする必要があるため、ホーム マシンの既知のターゲットと比較する必要があります。

于 2012-09-24T12:08:42.740 に答える