Heim  >  Artikel  >  Java  >  Wie implementiert man die AES-Verschlüsselung?

Wie implementiert man die AES-Verschlüsselung?

PHP中文网
PHP中文网Original
2017-06-20 14:48:081509Durchsuche

package util;

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 Administrator
*
*/
public class AES {

// 加密
   public static String Encrypt(String sSrc, String sKey) throws Exception {
       if (sKey == null) {
System.out.print("Key为空null");
           return null;
       }
       // 判断Key是否为16位
       if (sKey.length() != 16) {
           System.out.print("Key长度不是16位");
           return null;
       }
       byte[] raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
       Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
       cipher.init( Cipher.ENCRYPT_MODE, skeySpec);
       byte[] verschlüsselt = cipher.doFinal(sSrc.getBytes("utf-8"));

return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用.
   }

// Entschlüsseln > Public Static String Decrypt (String SSRC, String Skey) Throws Exception {
Try {
// Beurteilen, ob der Schlüssel korrekt ist
if (SKEY == NULL) { System.out.print("Key is null");
return null;
}
// Bestimmen Sie, ob der Schlüssel 16 Bit lang ist
if (sKey.length () != 16) {
          System.out.print("Key length is not 16 bits");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher. getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec );
byte[] verschlüsselt1 = new Base64().decode(sSrc);//Zuerst mit Base64 entschlüsseln
                                                                                                                               using  base64         using           using ' s ' ' using ' s ' t ‐ ‐ ‐ d byte[] original = cipher.doFinal(encrypted1);  
                String( original,"utf-8");
return originalString;
} Catch (Exception e) {
System.out.println(e.toString());
Return Null;
}
      } Catch (Exception Ex ) {
          System.out.println(ex.toString());
              return null; 🎝> */
public static byte[] encrypt(String content, String password) {
                                                     kgen. init(128, new SecureRandom (password.getBytes())); ​​SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES") ;
Cipher cipher = Cipher.getInstance("AES");
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE , key); // Initialisierung
              byte[] result = cipher.doFinal(byteContent) ; {
e.printStackTrace();
                        e.printStackTrace();
} Catch (UnsupportedEncodingException e) {
                      e.printStackTrace( );                                                                                                                                                                           e.printStackTrace();                   e.printStackTrace();  
           } Catch (BadPaddingException e) {  
                   e.printStackTrace();  
           }  
           return null;  
   }  
   /**Entschlüsselung
* @param content Zu entschlüsselnder Inhalt
* @param Passwort Entschlüsselungsschlüssel
* @return
*/  
   public static byte[] decrypt(byte[] content, String passwort) {  
           try {  
                  KeyGenerator kgen = erator.getInstance(" AES");  
                    kgen.init(128, new SecureRandom(password.getBytes()));  
                    SecretKey secretKey = kgen.generateKey();  
                    byte[] enCodeFormat = SecretKey.getEncoded();  
                    SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");              
                    Cipher cipher = Cipher.getInstance("AES");// 创建密码器  
                 cipher.init(Cipher.DECRYPT_MODE, key);// 
                   byte[] result = cipher.doFinal(content );  
                   Rückgabeergebnis; // 加密  
           } 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();  
           }  
           return null;  
   }  
   /**Konvertieren Sie binär in hexadezimal
* @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();  
   }  
   /**Hexadezimal in Binär umwandeln
* @param hexStr
* @return
*/  
   public static byte[] parseHexStr2Byte(String hexStr) {  
           if (hexStr.length() < 1)  
                  null zurückgeben;  
           byte[] result = new 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); 🎜> public static void main(String [] args) löst eine Ausnahme aus {
/*
* Hier wird der Verschlüsselungsmodus AES-128-ECB verwendet und der Schlüssel muss 16 Bit lang sein.
*/
String cKey = "1234567890123456";
// String, der verschlüsselt werden muss
String cSrc = "www.gowhere.so";
println(cSrc ) ;
                                                                                                                 String enString = AES.Encrypt(cSrc, cKey); // Decrypt
String DeString = AES.Decrypt(enString, cKey);
System.out.println("Der entschlüsselte String ist: " + DeString);
String content = "test";
String passwort = "12345678";
//Verschlüsselung
System.out.println("Vor der Verschlüsselung: " + content);
byte[] encryptResult = encrypt(content, password);
String encryptResultStr = parseByte2HexStr(encryptResult);
System.out.println("Nach der Verschlüsselung: " + encryptResultStr); 🎜> byte[] decryptFrom = par seHexStr2Byte(encryptResultStr);

byte[] decryptResult = decrypt(decryptFrom,password);

System.out.println("Nach der Entschlüsselung: " + new String(decryptResult));
}
}

Das obige ist der detaillierte Inhalt vonWie implementiert man die AES-Verschlüsselung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn