我有一個電子郵件驗證系統,發送加密鏈接供用戶點擊。我有一個用戶告訴我這是行不通的,我發現了一個很奇怪的錯誤,我無法解釋。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