banner
RustyNail

RustyNail

coder. 【blog】https://rustynail.me 【nostr】wss://ts.relays.world/ wss://relays.world/nostr

DES暗号化のJavaの使用

暗号化#

public byte[] encrypt(byte[] data, String key) throws Exception {
    try{
        
        SecureRandom random = new SecureRandom();
        
        DESKeySpec desKey = new DESKeySpec(key.getBytes());
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
        SecretKey securekey = keyFactory.generateSecret(desKey);
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
        return cipher.doFinal(data);
    }catch(Throwable e){
        e.printStackTrace();
    }
    return null;
}

Cipher は実際の暗号化です。

key の長さは 8 でなければならず、長すぎると切り詰められ、十分に長くない場合は例外が発生します。

復号化#

public byte[] decrypt(byte[] data, String key) throws Exception {
    SecureRandom random = new SecureRandom();
    DESKeySpec desKey = new DESKeySpec(key.getBytes());
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
    SecretKey securekey = keyFactory.generateSecret(desKey);
    Cipher cipher = Cipher.getInstance("DES");
    cipher.init(Cipher.DECRYPT_MODE, securekey, random);
    return cipher.doFinal(data);
}

Hex 文字列#

暗号化されたデータ(byte [])は Hex 文字列に変換して保存できます。

public String bytesToHexString(byte[] data){
    return HexBin.encode(data);
}

もちろん、復号化する前に Hex 文字列を byte [] に変換します。

public byte[] hexStringToBytes(String hexString){
    byte[] bytes = new byte[hexString.length() / 2];
    for (int i = 0; i < bytes.length; i++) {
        bytes[i] = (byte) Integer.parseInt(hexString.substring(2 * i, 2 * i + 2), 16);
    }
    return bytes;
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。