暗号化

自分用のmemo

package puzzle.palace;

import java.io.*;
import java.security.*;
import javax.crypto.*;


public class CreateKey {

public static void main(String[] args) {
ObjectOutputStream objStream = null;

try{
Security.addProvider(
new com.sun.crypto.provider.SunJCE());

KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");

keyGenerator.init(168);

SecretKey key = keyGenerator.generateKey();
objStream = new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream("seckey.ser")));

objStream.writeObject(key);


}catch(Exception e){
e.printStackTrace();
}finally{
try{
objStream.flush();
objStream.close();
}catch(Exception e){
e.printStackTrace();
}
}

}
}



package puzzle.palace;

import java.security.*;
import javax.crypto.*;


public class CryptoUtil{

private SecretKey key;
private String algorithm;

public CryptoUtil(SecretKey aKey){
key = aKey;
algorithm = key.getAlgorithm();

}


public byte[] encode(byte[] input)throws
NoSuchAlgorithmException,
InvalidKeyException,
IllegalBlockSizeException,
NoSuchPaddingException,
BadPaddingException
{

Cipher cipher = Cipher.getInstance(key.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE,key);

return cipher.doFinal(input);

}

public byte[] decode(byte[] input)throws
NoSuchAlgorithmException,
InvalidKeyException,
IllegalBlockSizeException,
NoSuchPaddingException,
BadPaddingException
{

Cipher cipher = Cipher.getInstance(key.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE,key);

return cipher.doFinal(input);

}

public static byte[] digest(byte[] input)throws
NoSuchAlgorithmException
{
MessageDigest md = MessageDigest.getInstance("MD5");

return md.digest(input);

}
}

package puzzle.palace;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.security.Security;

import javax.crypto.SecretKey;


public class Encrypt {

public static void main(String[] args) {
ObjectInputStream objStream = null;
String strPlain = null;

if(args.length > 0){
strPlain = args[0];
}else{
strPlain = "Test String";
}
byte[] encoded = null;

try{
Security.addProvider(
new com.sun.crypto.provider.SunJCE());

objStream = new ObjectInputStream(new FileInputStream("seckey.ser"));

SecretKey key = (SecretKey) objStream.readObject();
objStream.close();

CryptoUtil util = new CryptoUtil(key);

encoded = util.encode(strPlain.getBytes());
FileOutputStream outStream = new FileOutputStream("encrypted.txt");
outStream.write(encoded);
outStream.flush();
outStream.close();


}catch(Exception ex){
ex.printStackTrace();
}
}
}

package puzzle.palace;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.security.Security;

import javax.crypto.SecretKey;


public class Decrypt {

public static void main(String[] args) {
ObjectInputStream objStream = null;

try{
Security.addProvider(
new com.sun.crypto.provider.SunJCE());

objStream = new ObjectInputStream(new FileInputStream("seckey.ser"));

SecretKey key = (SecretKey) objStream.readObject();
objStream.close();

CryptoUtil util = new CryptoUtil(key);

ByteArrayOutputStream baOut = new ByteArrayOutputStream();
FileInputStream inStream = new FileInputStream("encrypted.txt");
byte b =(byte)inStream.read();
while(b != -1){
baOut.write(b);
b= (byte) inStream.read();
}
inStream.close();

System.out.println(new String(util.decode(baOut.toByteArray())));
baOut.close();




}catch(Exception ex){
ex.printStackTrace();
}
}
}