>  기사  >  Java  >  AES 암호화를 구현하는 방법은 무엇입니까?

AES 암호화를 구현하는 방법은 무엇입니까?

PHP中文网
PHP中文网원래의
2017-06-20 14:48:081492검색

패키지 유틸리티;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto .Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache .tomcat.util.codec.binary.Base64;

/**
*
* @author 관리자
*
*/
public class AES {

// 加密
   public static String Encrypt(String sSrc, String sKey)에서 예외 발생 {
       if (sKey == null) {
           System.out.print("Key为공간null");
           return null;
       }
       // 判断Key是否为16位
       if (sKey .length() != 16) {
           시스템 .out.print("Key长道不是16位");
           null을 반환합니다.
       }
       byte[] raw = sKey.getBytes("utf-8");
       SecretKeySpec = new SecretKeySpec(raw, "A ES") ;
       암호화 cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"종료/模式/补码方式"
       cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
       byte[] 암호화됨 = cipher.do최종 (sSrc.getBytes("utf-8"));

새로운 Base64().encodeToString(암호화)을 반환합니다.

// Decrypt
public static String Decrypt(String sSrc, String sKey)는 예외를 발생시킵니다.       System.out.print("키가 비어 있음 null ");
Return NULL
}
// 키가 16인지 확인합니다. bit
iF (SKEY.Length ()! = 16) {
System.out.print (" 키가 16비트가 아닙니다 ") ;
      }
            byte[] raw = sKey.getBytes("utf-8") ;????                                                                                          getInstance ("AES/ECB/PKCS5Padding") ;
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] 암호화된1 = new Base64().decode(sSrc);//base64를 사용하여 먼저 암호 해독
                           byte [] 원본 = cipher.doFinal(encrypted1) ; In String Originalstring = New String (Original, "UTF-8")
Return Originalstring;
} Catch (예외 E) {
System.oT.println (e.tostring ( )); N 반환 null;
}
} Catch (예외 EX) {
System.out.println (ex.tostring ()); 테스트, 문자열 비밀번호) {
                                                        .getBytes()))
                 SecretKey secretKey = kgen .generateKey();                       byte[ ] ENCODEFORMAT = Secretkey.Getencoded ();
Secretkeyspec Key = New Secretkeyspec (EncodeFormat, "AES")
cipher cipher.getInstance ("AES" ); // 비밀번호 생성 bytecontent = Content.getbytes ("UTF-8");
cipher.init (cipher.encrypt_mode, key); // 초기화
byte [] result = cipher.dofinal (bytecontent); NoSuchalgorithmException E) {
                   e.printStackTrace( ); InvalidKeyException e) {
                                  e.printStackTrace() () } catch (IllegalBlockSizeException e);                   e.printStackTrace();  
           } catch (BadPaddingException e) {  
                   e.printStackTrace();  
           }  
           null을 반환합니다.  
   }  
   /**복호화
* @param content 복호화할 콘텐츠
* @param 비밀번호 복호화 키
* @return
*/  
   public static byte[] decrypt(byte[] content, String Password) {  
           시도 {  
                    KeyGenerator kgen = KeyGenerator.getInstance("AES");  
                    kgen.init(128, new SecureRandom(password.getBytes()));  
                    SecretKey secretKey = kgen.generateKey();  
                    byte[] enCodeFormat = secretKey.getEncoded();  
                    SecretKeySpec 키 = new SecretKeySpec(enCodeFormat, "AES");              
                  Cipher cipher = Cipher.getInstance("AES");// 创建密码器  
                   cipher.init(Cipher.DECRYPT_MODE, key);// 初始화  
                   byte[] result = cipher.doFinal(content);  
                   결과 반환; // 加密  
           } catch (NoSuchAlgorithmException e) {  
                   e.printStackTrace();  
           } catch (NoSuchPaddingException e) {  
                   e.printStackTrace();  
           } catch (InvalidKeyException e) {  
                   e.printStackTrace();  
           } catch (IllegalBlockSizeException e) {  
                   e.printStackTrace();  
           } catch (BadPaddingException e) {  
                   e.printStackTrace();  
           }  
           null을 반환합니다.  
   }  
   /**2진수를 16진수로 변환
* @param buf
* @return
*/  
   public static String parseByte2HexStr(byte buf[]) {  
           StringBuffer sb = new StringBuffer();  
           for (int i = 0; i < buf.length; i++) {  
                   String hex = Integer.toHexString(buf[i] & 0xFF);  
                   if (hex.length() == 1) {  
                           hex = '0' + hex;  
                   }  
                   sb.append(hex.toUpperCase());  
           }  
           return sb.toString();  
   }  
   /**16진수를 2진수로 변환
* @param hexStr
* @return
*/  
   public static byte[] parseHexStr2Byte(String hexStr) {  
           if (hexStr.length() < 1)  
                    null을 반환합니다.  
           byte[] 결과 = 새 바이트[hexStr.length()/2];  
           for (int i = 0;i< hexStr.length()/2; i++) {  
int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
                int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), ( String[] args)는 예외 {
          /*
            * 여기에서 예외를 발생시킵니다. AES-128-ECB 암호화 모드를 사용하려면 키가 16비트여야 합니다. T */r String CKEY = "1234567890123456";
// 암호화된 문자열
String CSRC = "www.gowhere.so";
System.out.println (CSRC);Encrypt(cSrc, cKey);
시스템 .out.println("암호화된 문자열은: " + enString);

// 해독
String DeString = AES.Decrypt(enString, cKey);
System.out .println("암호화된 문자열은: " + DeString );
          문자열 콘텐츠 = "테스트";             문자열 비밀번호 = "12345678";                             ); =parseByte2HexStr(encryptResult);
System.out.println("이후 암호화: " + encryptResultStr);
//복호화
byte[] decryptFrom =parseHexStr2Byte(encryptResultStr);
byte[] decryptResult = decrypt(decryptFrom,password);
System.out.println("복호화 후: " + new String (decryptResult))

}

}

위 내용은 AES 암호화를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.