スキマハコ

わすれがちなスキマな事を詰め込んでいます。ITの他に暮らしについても書いています。

javaのAPIを用いた暗号化

javaAPIを用いる場合、処理する時の型はbyte型。
しかし、だいたいファイルを読み込むとき、String型だから変換の必要がある。

参考元:http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/String.html#getBytes(java.lang.String)

import java.io.UnsupportedEncodingException;   
  
public class henkan{   
    public static void main(String []args) {   
        String str = "テストStrig";   
          
        try {   
            //String -> byte[]  
            byte [] bytes = str.getBytes("UTF-8");  //String.getBytes();    or      String.getBytes(encoding);   
               
            //byte [] -> String   
            String xx = new String(bytes, "UTF-8"); //    
            System.out.println(xx);   
        } catch (UnsupportedEncodingException e) {     
            e.printStackTrace();   
        }   
    }   
} 

byte型に変換した後、暗号化に使用する。
参考元:http://www.masatom.in/pukiwiki/Java/%B0%C5%B9%E6%B2%BD/

/*
 * 暗号化と復号
 */
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;


public class Encrypt{

    public static void main(String[] args) {

        try {


            // 暗号化
            KeyGenerator kg = KeyGenerator.getInstance("DES");
            Key key = kg.generateKey();
            Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding");
            c.init(Cipher.ENCRYPT_MODE, key);
            //入力文字列はbyte型である必要
            //byte input[] = "To be encrypted data.".getBytes();
            byte input[] = str.getBytes("UTF-8");  //String.getBytes();    or      String.getBytes(encoding);
            byte encrypted[] = c.doFinal(input); // ここで暗号化

            // ここから復号処理
            byte iv[] = c.getIV();

            IvParameterSpec dps = new IvParameterSpec(iv);
            c.init(Cipher.DECRYPT_MODE, key, dps);
            byte output[] = c.doFinal(encrypted);

            // 表示
            System.out.println("The string was \"");
            System.out.println(new String(output) + "\"");

        } catch (Exception e) {

            e.printStackTrace();

        }
    }
}

バイナリがバイト単位のファイルだと初めて知った…。
復号は読込時に行うので読込のファイル自体をバイナリで読み込んでもいいのかな??そうしたら読込とbyte型変換を一気にしてくれてありがたいのだけれど。

…でも、暗号化を行って書き込むとき、すべてStringで書き込むのかな??こっちの書き方次第かもしれないけど…。

そんなわかっていないところまとめ。
ファイルに書き込むときに文字列の型は決まっているか
ファイルの文字コードは何によって決まっているか(拡張子でtxt=jisとかがあるのか?)