PGBox
P
G
Box

暗号化・複合化

セキュリティのメニューへ戻る



使用した環境
JDK 6 Update 11

秘密鍵を使用した暗号化・複合化のサンプルです。


下記は、Blowfishアルゴリズムを使用した暗号化のサンプルです。

暗号結果はbyte配列で取得されますので、その後扱いやすいように、Base64エンコードを行っています。
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import com.sun.org.apache.xml.internal.security.utils.Base64;

public class Main {
    
    public static void main(String[] args) throws Exception {
        
        // 暗号化する文字列
        String text = "あいうえお";
        
        // 暗号化の秘密鍵
        String key = "abcdefg";
        
        // 使用する暗号化アルゴリズム
        String algorithm = "BLOWFISH";
        
        // 暗号化
        SecretKeySpec sksSpec = new SecretKeySpec(key.getBytes(), algorithm);
        Cipher cipher = Cipher.getInstance(algorithm);
        cipher.init(Cipher.ENCRYPT_MODE, sksSpec);
        
        byte[] encrypted = cipher.doFinal(text.getBytes());    
        
        // Base64エンコード
        String encryptedText = Base64.encode(encrypted);
        
        System.out.println(encryptedText);
    }
    
}

結果は以下のようになります。
eZhCuSzSt/+FV82ucBzdSQ==

暗号化された文字列の複合化は以下のようにして行います。
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import com.sun.org.apache.xml.internal.security.utils.Base64;

public class Main {
    
    public static void main(String[] args) throws Exception {
        
        // 暗号化する文字列
        String text = "eZhCuSzSt/+FV82ucBzdSQ==";
        
        // 暗号化の秘密鍵
        String key = "abcdefg";
        
        // 使用する暗号化アルゴリズム
        String algorithm = "BLOWFISH";
        
        // Base64エンコードされた文字列をデコード
        byte[] encrypted = Base64.decode(text);
        
        // 複合化
        SecretKeySpec sksSpec = new SecretKeySpec(key.getBytes(), algorithm);
        Cipher cipher = Cipher.getInstance(algorithm);
        cipher.init(Cipher.DECRYPT_MODE, sksSpec);
        
        byte[] decrypted = cipher.doFinal(encrypted);
    
        String decryptedText = new String(decrypted);
        
        System.out.println(decryptedText);
    }
    
}

結果は以下のようになります。
あいうえお


SecretKeySpecのコンストラクタや、Cipher.getInstanceの引数に使用するアルゴリズム文字列は、"BLOWFISH"以外にも、"DES"や"AES"などのアルゴリズムも指定可能です。
一般的な暗号化アルゴリズムはだいたい用意されています。
以下のようにすると、環境で使用可能なアルゴリズムの一覧が取得できます。
import java.security.Security;
import java.util.Set;

public class Main {
    
    public static void main(String[] args) throws Exception {
        
        Set<String> names = Security.getAlgorithms("Cipher");
        for (String name : names) {
            System.out.println(name);
        }
        
    }
    
}
実行結果は以下のようになります。(環境やバージョンによって結果は異なる可能性があります。)
BLOWFISH
ARCFOUR
PBEWITHMD5ANDDES
RC2
RSA
PBEWITHMD5ANDTRIPLEDES
PBEWITHSHA1ANDDESEDE
DESEDE
AESWRAP
AES
DES
DESEDEWRAP
RSA/ECB/PKCS1PADDING
PBEWITHSHA1ANDRC2_40








セキュリティのメニューへ戻る