Я работаю над обновлением утилиты шифрования паролей от чего-то полностью доморощенного до созданного на основе Jasypt и Bouncy Castle. Утилита шифрует пароль; затем зашифрованная строка вставляется в файл свойств, считывается и расшифровывается приложением Grails.
Я написал утилиту командной строки Java для шифрования пароля. Соответствующий код Java:
public class PasswordUtility {
private final String SALT = "randomstring";
private final StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
public PasswordUtility( String seed ) {
String password = SALT + seed;
encryptor.setProvider( new BouncyCastleProvider() );
encryptor.setAlgorithm( "PBEWITHSHA256AND192BITAES-CBC-BC" );
encryptor.setPassword( password );
}
public String decrypt( String encryptedText ) {
String processText = encryptedText;
return encryptor.decrypt( processText );
}
public String encrypt( String plainText ) {
return encryptor.encrypt( plainText );
}
}
Код Groovy:
class StringEncryptor {
String salt = "randomstring"
private StandardPBEStringEncryptor initCrypto( String keySplit ) {
StandardPBEStringEncryptor pbe = new StandardPBEStringEncryptor()
pbe.setProvider( new BouncyCastleProvider() )
pbe.setAlgorithm( "PBEWITHSHA256AND192BITAES-CBC-BC" )
String cryptKey = salt + keySplit
pbe.setPassword( cryptKey )
return pbe
}
String encrypt( String keySplit, String encryptText ) {
StandardPBEStringEncryptor pbe = initCrypto( keySplit )
pbe.encrypt( encryptText )
}
String decrypt( String keySplit, String encryptText ) {
log.info encryptText
log.info keySplit
StandardPBEStringEncryptor pbe = initCrypto( keySplit )
pbe.decrypt( encryptText )
}
}
Когда я запускаю PasswordUtility локально (на Mac), вставляю результаты в файл свойств и локально запускаю Grails, пароль расшифровывается правильно. Когда я запускаю PasswordUtility на виртуальном сервере RHEL и вставляю результаты в файл свойств, я получаю исключение EncryptionOperationNotPossibleException, и, глядя на код, можно предположить, что расшифровка могла завершиться неудачно — строка StandardPBEByteEncryptor 1055). Когда я беру строку с Mac и пытаюсь расшифровать ее на RHEL, расшифровка возвращает нуль. Я могу взять строку из одного блока RHEL и расшифровать ее в другом блоке RHEL.