サクッとBCryptで文字列を暗号化する
コマンドライン引数で文字列を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
こんな感じでやりたかったことはやれた。