패키지 유틸리티;
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!