2016-08-24 3 views
-1

암호를 확인하려고하는데 암호는 전에 암호화했지만 예외가 발생하고 이유를 모르겠습니다. 내가 로그인을 수행하기 전에 암호를 확인하려고 컨트롤러에암호화 된 암호 확인 : org.jasypt.exceptions.EncryptionOperationNotPossibleException

@Service("XEncryptor") 
public class XEncryptor { 
    private ConfigurablePasswordEncryptor configurablePasswordEncryptor; 

    //some parameters and init methods 
    public String encryptPassword(String password){ 
     configurablePasswordEncryptor.setAlgorithm("SHA-1"); 
     configurablePasswordEncryptor.setPlainDigest(true); 
     return configurablePasswordEncryptor.encryptPassword(password); 
    } 

    // i use this one to check the password 
    public boolean checkPassword(String inputPassword, String encryptedPassword){ 
     return configurablePasswordEncryptor.checkPassword(inputPassword, encryptedPassword); 
    } 
} 

: 내가 암호를 암호화하는 데 사용하는 여기

방법

. XEncryptor의 서비스에서 checkPassword를 호출하지만 작동하지 않습니다. 여기

호출 : 내가 checkpassword를 주석 때

xEncryptor.checkPassword(password, user.getPassword()); 
password = user.getPassword(); 
//do login ... 

, 로그인이 성공적으로 수행되는 것입니다.

첫 번째 매개 변수 (암호)는 사용자가 로그인으로 보내고 두 번째 매개 변수는 데이터베이스에서 가져온 암호화 된 암호입니다.

나는 코드 줄과 등록 과정에서 암호를 암호화 :

password = xEncryptor.encryptPassword(password); 
user.setPassword(password); 

암호화가 성공적으로 작동합니다. 여기

오류 로그 :

boot - 42487 ERROR [http-nio-8443-exec-4] --- [dispatcherServlet]: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.jasypt.exceptions.EncryptionOperationNotPossibleException] with root cause 
org.jasypt.exceptions.EncryptionOperationNotPossibleException 
     at org.jasypt.digest.StandardByteDigester.matches(StandardByteDigester.java:1106) 
     at org.jasypt.digest.StandardStringDigester.matches(StandardStringDigester.java:1052) 
     at org.jasypt.util.password.ConfigurablePasswordEncryptor.checkPassword(ConfigurablePasswordEncryptor.java:251) 
     at com.x.server.helper.XEncryptor.checkPassword(XEncryptor.java:28) 
     at com.x.server.controller.LoginController.login(LoginController.java:68) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:497) 
     at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222) 
     at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 
     at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
     at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814) 
     at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737) 
     at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969) 
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:871) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:243) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:111) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:176) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213) 
     at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176) 
     at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
     at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) 
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
     at java.lang.Thread.run(Thread.java:745) 

어떤 아이디어가? 도와 주셔서 감사합니다. http://www.jasypt.org/api/jasypt/1.8/org/jasypt/util/password/ConfigurablePasswordEncryptor.html에서

+0

이름에도 불구하고 암호화되지 않습니다. 암호화는 되돌릴 수있는 프로세스이지만 해시는이 경우처럼 단방향입니다. 'checkPassword'는 비교를 위해 반복 해싱을 처리해야합니다. –

+1

해시 함수만으로는 충분하지 않으며 단지 소금을 추가하면 보안을 향상시키는 데별로 도움이되지 않습니다. 대신 HMAC를 무작위로 약 100ms의 지속 시간 동안 반복하고 소금을 해시로 저장하십시오. password_hash, PBKDF2, Bcrypt 및 유사한 기능과 같은 기능을 사용하십시오. 요점은 공격자가 무차별 적으로 암호를 찾는 데 많은 시간을 소비하게하는 것입니다. – zaph

답변

1

는 :

사용하는 데 필요한 단계는 다음과 같습니다

(새 사용) 인스턴스를 만듭니다. 필요한 경우 setX() 메소드를 사용하여 구성하십시오. 원하는 encryptPassword (String) 또는 checkPassword (String, String) 작업을 수행하십시오.

새 인스턴스가 어떻게 생성되는지는 알 수 없지만 NullPointerException이 발생하지 않으므로 문제가되지 않습니다. EncryptionOperationNotPossibleException은 일반적으로 누락 된 구성을 나타냅니다.

가능하다면, 당신은

configurablePasswordEncryptor = new ConfigurablePasswordEncryptor(); 
    configurablePasswordEncryptor.setAlgorithm("SHA-1"); 
    configurablePasswordEncryptor.setPlainDigest(true); 

그렇지 않으면 checkPassword 방법, 당신은 아마 알고리즘을 설정하려면 ... 대신 모든 메소드 호출의 (새로운 암호화 기 인스턴스를 생성 한 후) 회 구성을해야하고 요약 모드 :

public boolean checkPassword(String inputPassword, String encryptedPassword){ 
    configurablePasswordEncryptor.setAlgorithm("SHA-1"); 
    configurablePasswordEncryptor.setPlainDigest(true); 
    return configurablePasswordEncryptor.checkPassword(inputPassword, encryptedPassword); 
} 
+0

@PostConstruct public void init() {configurablePasswordEncryptor = new configurablePasswordEncryptor()}를 사용하여 init 메소드에서 configurablePasswordEncryptor의 인스턴스를 만들었습니다. – emoleumassi

+0

그것은 작동합니다, 나는 암호 메신저의 설정을 init 메소드에서 설정합니다. – emoleumassi