Недавно в проекте возникла необходимость в шифровании паролей, поэтому я узнал об асимметричном шифровании.
Для асимметричного шифрования наиболее часто используются RSA и DSA. Асимметричное шифрование имеет две концепции: открытый ключ и закрытый ключ. Закрытый ключ принадлежит вам и не может быть передан другим, а открытый ключ является открытым.
В зависимости от приложения могут использоваться различные ключи шифрования:
RSA — один из самых популярных алгоритмов асимметричного шифрования. Также известно как шифрование с открытым ключом. Его предложили в 1977 году Рон Ривест, Ади Шамир и Леонард Адлеман. Все трое в то время работали в Массачусетском технологическом институте. RSA состоит из начальных букв их фамилий, написанных вместе.
RSA асимметричен, то есть ключ, используемый для шифрования, и ключ, используемый для дешифрования, не совпадают. Как и DES, RSA также является алгоритмом блочного шифрования, но разница в том, что размер блока можно изменить в зависимости от размера ключа. Если зашифрованные данные не являются целым числом, кратным размеру блока, в зависимости от приложения будут добавлены дополнительные биты заполнения.
В инструменте hutool есть готовые методы для использования;
Сначала нужно ввести зависимости:
compile 'cn.hutool:hutool-crypto:5.8.9'
В Заявке на проект есть возможность шифровать пароли в классе запуска;
Псевдокод выглядит следующим образом:
public class GzApplication {
public static void main(String[] args) {
if(args.length >= 2){
encryptPwd(args[0],args[1]);
return;
}
SpringApplication.run(GzApplication.class, args);
}
public static String encryptPwd(String pwd,String pubKey){
RSA rsa = SecureUtil.rsa(null, pubKey);
String base64 = rsa.encryptBase64(pwd, StandardCharsets.UTF_8, KeyType.PublicKey);
String encryptPwd = new StringBuffer("RSA:").append(base64).toString();
return encryptPwd;
}
После завершения упаковки используйте команду java -jar **.jar pwd pubkey для вывода зашифрованной строки;