暗号化
自分用の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();
}
}
}