Help us understand the problem. What is going on with this article?

サクッとBCryptで文字列を暗号化する

More than 1 year has passed since last update.

コマンドライン引数で文字列を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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away