2012-09-21 5 views
0

나는 사용자가 클릭 할 수 있도록 암호화 된 링크를 보내는 전자 메일 확인 시스템을 보유하고 있습니다. 한 사용자가 작동하지 않는다고 말하면서 설명 할 수없는 매우 이상한 오류를 발견했습니다.암호 작성기 URL이 깨졌습니다.

이 이것은 Tomcat 서버에

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

내 응용 프로그램이 실행되는 struts2 작동하지 않는 원격 URL입니다

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

잘 작동 로컬 URL하지만 난 그렇게하지 그게 중요하다고 생각해. 원격 요청에서 변수 cypher는 null입니다. 이유를 이해할 수 없습니다.

나쁜 기록이 실제 문제가 숨어 있음을 밝혀

크리스

UPDATE 동일한 코드를

건배

를 실행합니다. 문제는 서버에 그것은 보인다

그것이라고 그 서버에서 발생하는 로컬이 아닌

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) 

을 받고 있다는 것입니다 이 사람과 비슷한 문제가 있습니다. Exception: "Given final block not properly padded" in Linux, but it works in Windows

Linux에서 인코딩 차이가 있습니까?

+0

'remotehost' 주소가 실제로 서버를 가리 킵니까? – bdares

+0

예. 내 Tomcat 서버로 직접 이동합니다. 그것은 대다수의 cyphers에서 작동합니다. 문제는 특수 문자가있는 경우입니다. 9TOfCNEeycQM3tAsIyRtox8fAlLNYu + o는 +로 인해 작동하지 않는 TOfCNEeycQM3tAsIyRtox8fAlLNYu % 2Bo로 인코딩됩니다. 왜 로컬에서 작동하지만 변수 cypher가 원격 시스템에서 null인지 이해할 수 없습니다. – Kris

+0

전송 된 경우 null g6EIaeFZHmUWTBqUUzeADQeZGcDaeWms를 반환하는 또 다른 예입니다. 나는 약간의 등장 인물을 제거하여 조금 연주했다. 이것은 g6EIaeFZHmUWTBqUUzeADQeZGcDae에서 작동하지만 null g6EIaeFZHmUWTBqUUzeADQeZGcDaeW로 반환됩니다.왜 도대체 'W'가 효과가 있을까요? – Kris

답변

0

키는 두 대의 컴퓨터에서 서로 다릅니다. 두 시스템의 키 처리를 추적하여 차이가 생성되는 위치를 정확히 찾아 낼 수 있어야합니다. 바이트와 ​​바이트의 일치를 항상 확인하십시오. 문자 매칭은 사기성이있을 수 있습니다. 예를 들어, 줄의 끝은 서로 다른 시스템간에 눈에 띄지 않을 수 있습니다.

먼저 전송 후 수신되는 내용이 정확히 인 것을 확인합니다. 그런 다음 직렬화 된 키/매개 변수의 모든 처리 후에 로그에 바이트 덤프를 넣습니다. 집과 떨어져있는 기계 모두에서 이것을 수행하고 비교하십시오. 이는 "두 시스템에서 동일"에서 "시스템간에 서로 다른"변화가 어디에서 발생하는지 정확히 알려줍니다. 문제가 발생하는 곳의 메소드 나 코드 섹션을 찾아야합니다. 문제가 격리 될 때까지 해당 코드 조각 내에서 바이트 덤프를 반복하십시오. 다시 말하지만, 비교 대상이되는 가정용 기계의 목표물을 알기 위해서는 두 기계를 덤프해야합니다.

+0

그것에 대해 생각해 보면 열쇠가 다르다는 것이 중요합니까? 서버는 암호화 된 링크가 포함 된 전자 메일을 보내는 컴퓨터이며 링크 해독 요청을받는 서버이므로 항상 동일한 키를 사용합니다. 그러니 괜찮지 않아? 또는 키가 서버에서 새로운 것을 생성해야하는 곳을 망쳐 놓은 것입니까? – Kris

0

설정하기 전에 암호화 된 키의 URL 인코딩을 수행하십시오. 그러면 추가 문자가 추가되지 않습니다.