我有一个电子邮件验证系统,发送加密链接供用户点击。我有一个用户告诉我这是行不通的,我发现了一个很奇怪的错误,我无法解释。URL中破解的密码破解
这是正常工作
http://localhost/cypher.action?cypher=TphMFuv%2FwcsgLThnU5cWInJFaZPMHeDFFL%2FRRPbbV70%3D
这是不起作用在Tomcat服务器上
http://remotehost/cypher.action?cypher=TphMFuv%2FwcsgLThnU5cWInJFaZPMHeDFFL%2FRRPbbV70%3D
我的应用程序运行时Struts2的远程URL的本地URL,但我不知道认为重要。在远程请求上,变量密码为空。我不明白为什么。它的运行完全相同的代码
干杯
克里斯
UPDATE
原来那么糟记录藏身的现实问题。问题是,在服务器上它得到一个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)
我们发现这是为什么发生在服务器上,而不是本地
UPDATE
看来,这是一个类似的问题,这个人有 Exception: "Given final block not properly padded" in Linux, but it works in Windows
Linux上的一些编码区别?
您的'remotehost'地址是否真的指向服务器? – bdares
是的,它直接到我的Tomcat服务器。它适用于绝大多数密码。问题在于什么时候有特殊字符。如9TOfCNEeycQM3tAsIyRtox8fAlLNYu + o编码为TOfCNEeycQM3tAsIyRtox8fAlLNYu%2Bo,由于+也不起作用。我不明白为什么它在本地工作,但变量密码在远程计算机上为空 – Kris
这是另一个发送时返回null的示例g6EIaeFZHmUWTBqUUzeADQeZGcDaeWms。我通过删除一些字符来玩一点。这工作g6EIaeFZHmUWTBqUUzeADQeZGcDae,但这是返回为空g6EIaeFZHmUWTBqUUzeADQeZGcDaeW。为什么会出现'W'效应呢? – Kris