コマンドライン引数で文字列をBCryptで暗号化するコード書いたのでメモしておく。
Mavenなどのパッケージ管理ツール使わず、とにかくサクッとやる想定。
パッケージダウンロード
利用するライブラリをサイトから手動ダウンロードする。
spring-security-coreだけだと実行時にcommons-loggingがないというjava.lang.NoClassDefFoundErrorが出力されるので、とりあえず追加。
実装
これらのライブラリをlib配下に格納し、以下の2クラスを実装する。
引数をBCryptで暗号化するCLBCryptPasswordEncoder.java。
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.apache.commons.logging.LogFactory;
public class CLBCryptPasswordEncoder{
public static void main(String args[]){
String textPassword = args[0];
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
System.out.println(encoder.encode(textPassword));
}
}
平文パスワードと暗号化済パスワードが一致するか確認するCLBCryptPasswordMatcher.java。
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.apache.commons.logging.LogFactory;
public class CLBCryptPasswordMatcher{
public static void main(String args[]){
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String textPassword = args[0];
String encryptedPassword = args[1];
if (encoder.matches(textPassword, encryptedPassword)) {
System.out.println("matched");
} else {
System.out.println("mismatched");
}
}
}
ディレクトリ構成
ディレクトリ構造は以下のとおり。
- CLBCryptPasswordEncoder.java
- CLBCryptPasswordMatcher.java
- lib/
- commons-logging-1.2.jar
- spring-security-core-5.0.2.RELEASE.jar
コンパイル
$ javac -cp "lib/*" CLBCryptPasswordEncoder.java
$ javac -cp "lib/*" CLBCryptPasswordMatcher.java
カレントディレクトリにクラスが生成される。
実行
暗号化と検証の実行。classpathにカレントディレクトリを追加。
$ java -cp "lib/*:." CLBCryptPasswordEncoder sonomirai
$2a$10$ALcXPgrpOQKXoIyrgS90huCbgR906LtWrH1dOsZmHtBZdSB19n9Bi
$ java -cp "lib/*:." CLBCryptPasswordMatcher sonomirai '$2a$10$ALcXPgrpOQKXoIyrgS90huCbgR906LtWrH1dOsZmHtBZdSB19n9Bi'
matched
$ java -cp "lib/*:." CLBCryptPasswordMatcher dummypswd '$2a$10$ALcXPgrpOQKXoIyrgS90huCbgR906LtWrH1dOsZmHtBZdSB19n9Bi'
mismatched
こんな感じでやりたかったことはやれた。