스프링

package decode;

import javax.crypto.*;
import javax.crypto.spec.*;
import java.io.*;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
 
public class AES128Cipher {
    
    public static void main(String[] args)
    {
        
        //System.out.println("keyGenerator()  " + keyGenerator());
        System.out.println(keyGenerator());
              try
              { 
                 String originalText = "plain text";
                 String key = keyGenerator();
                 String en = Encrypt( originalText, key);
                 String de = Decrypt( en, key);
                
                 System.out.println( "Original Text is " + originalText);
                         System.out.println( "Encrypted Text is " + en );
                         System.out.println( "Decrypted Text is " + de );
                  }
              catch (Exception ex)
              {
                         System.out.println("오류");
              }
             
    }

    public static String keyGenerator(){
       // 키값 생성 // 매번 다른 키가 생성 된다.
        KeyGenerator generator;
        Key secureKey = null;
        try {
            generator = KeyGenerator.getInstance("AES");
        
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
            generator.init(128, random);
            secureKey = generator.generateKey();
            
            
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
        return new String(secureKey.getEncoded());
                
    }
    
    
    public static String Decrypt(String text, String key) throws Exception
    {
              Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
              byte[] keyBytes= new byte[16];
              byte[] b= key.getBytes("UTF-8");
              int len= b.length;
              if (len > keyBytes.length) len = keyBytes.length;
              System.arraycopy(b, 0, keyBytes, 0, len);
              SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
              IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
              cipher.init(Cipher.DECRYPT_MODE,keySpec,ivSpec);

              BASE64Decoder decoder = new BASE64Decoder();
              byte [] results = cipher.doFinal(decoder.decodeBuffer(text));
              return new String(results,"UTF-8");
    }

    public static String Encrypt(String text, String key) throws Exception
    {
              Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
              byte[] keyBytes= new byte[16];
              byte[] b= key.getBytes("UTF-8");
              int len= b.length;
              if (len > keyBytes.length) len = keyBytes.length;
              System.arraycopy(b, 0, keyBytes, 0, len);
              SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
              IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
              cipher.init(Cipher.ENCRYPT_MODE,keySpec,ivSpec);

              byte[] results = cipher.doFinal(text.getBytes("UTF-8"));
              BASE64Encoder encoder = new BASE64Encoder();
              return encoder.encode(results);
    }
     
}

 

about author

PHRASE

Level 60  머나먼나라

옛날 한신(韓信)은 뜻을 얻어 과거에 자기가 불우할 때에 곤궁을 구해준 빨래하는 노파에게 보은을 했다. 지금 그 노파와 같은 당신의 은혜에 대해 나는 고맙기 그지없이 느끼고는 있으나 부끄러운 일이지만 한신과 같은 재주가 없으니 한신처럼 그 은혜를 갚을 수 있을지 모르겠다. -고시원

댓글 ( 5)

댓글 남기기

작성

스프링 목록    more