サクッと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

こんな感じでやりたかったことはやれた。