1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.wss4j.common.crypto;
21
22 import java.io.IOException;
23
24 import javax.security.auth.callback.Callback;
25 import javax.security.auth.callback.CallbackHandler;
26 import javax.security.auth.callback.UnsupportedCallbackException;
27
28 import org.apache.wss4j.common.ext.WSPasswordCallback;
29 import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
30
31
32
33
34
35
36 public class JasyptPasswordEncryptor implements PasswordEncryptor {
37
38 public static final String DEFAULT_ALGORITHM = "PBEWithMD5AndTripleDES";
39
40 private static final org.slf4j.Logger LOG =
41 org.slf4j.LoggerFactory.getLogger(JasyptPasswordEncryptor.class);
42
43 private final StandardPBEStringEncryptor passwordEncryptor;
44 private CallbackHandler callbackHandler;
45
46 public JasyptPasswordEncryptor(String password) {
47 this(password, DEFAULT_ALGORITHM);
48 }
49
50 public JasyptPasswordEncryptor(String password, String algorithm) {
51 passwordEncryptor = new StandardPBEStringEncryptor();
52 passwordEncryptor.setPassword(password);
53 passwordEncryptor.setAlgorithm(algorithm);
54 }
55
56 public JasyptPasswordEncryptor(CallbackHandler callbackHandler) {
57 this(callbackHandler, DEFAULT_ALGORITHM);
58 }
59
60 public JasyptPasswordEncryptor(CallbackHandler callbackHandler, String algorithm) {
61 passwordEncryptor = new StandardPBEStringEncryptor();
62 passwordEncryptor.setAlgorithm(algorithm);
63 this.callbackHandler = callbackHandler;
64 }
65
66
67
68
69
70
71 public String encrypt(String password) {
72 if (callbackHandler != null) {
73 WSPasswordCallback pwCb =
74 new WSPasswordCallback("", WSPasswordCallback.PASSWORD_ENCRYPTOR_PASSWORD);
75 try {
76 callbackHandler.handle(new Callback[]{pwCb});
77 } catch (IOException | UnsupportedCallbackException e) {
78 LOG.debug("Error in getting password: ", e);
79 }
80 if (pwCb.getPassword() != null) {
81 passwordEncryptor.setPassword(pwCb.getPassword());
82 }
83 }
84 return passwordEncryptor.encrypt(password);
85 }
86
87
88
89
90
91
92 public String decrypt(String encryptedPassword) {
93 if (callbackHandler != null) {
94 WSPasswordCallback pwCb =
95 new WSPasswordCallback("", WSPasswordCallback.PASSWORD_ENCRYPTOR_PASSWORD);
96 try {
97 callbackHandler.handle(new Callback[]{pwCb});
98 } catch (IOException | UnsupportedCallbackException e) {
99 LOG.debug("Error in getting password: ", e);
100 }
101 if (pwCb.getPassword() != null) {
102 passwordEncryptor.setPassword(pwCb.getPassword());
103 }
104 }
105 return passwordEncryptor.decrypt(encryptedPassword);
106 }
107
108 }