2016-04-06 4 views
-1

als ich versuchte, diesen Code zu implementieren, die (AES-Algorithmus in Java geschrieben) ist, dass ich einen Fehler in diesen Zeilen gefunden:Java-AES-Verschlüsselung Beispiel

import org.apache.commons.codec.binary.Base64; 

      setEncryptedString(Base64.encodeBase64String(cipher.doFinal(strToEncrypt.getBytes("UTF-8")))); 

      setDecryptedString(new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt)))); 

Der Hauptcode lautet:

package trytry; 


import java.io.UnsupportedEncodingException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import java.security.SecureRandom; 
import java.security.spec.AlgorithmParameterSpec; 
import java.security.spec.InvalidKeySpecException; 
import java.security.spec.KeySpec; 
import java.util.Arrays; 

import javax.crypto.Cipher; 
import javax.crypto.SecretKey; 
import javax.crypto.SecretKeyFactory; 
import javax.crypto.spec.IvParameterSpec; 
import javax.crypto.spec.PBEKeySpec; 
import javax.crypto.spec.SecretKeySpec; 
import javax.print.DocFlavor.STRING; 

import org.apache.commons.codec.binary.Base64; 



public class AES 
{ 


    private static SecretKeySpec secretKey ; 
    private static byte[] key ; 

    private static String decryptedString; 
    private static String encryptedString; 


    public static void setKey(String myKey){ 


     MessageDigest sha = null; 
     try { 
      key = myKey.getBytes("UTF-8"); 
      System.out.println(key.length); 
      sha = MessageDigest.getInstance("SHA-1"); 
      key = sha.digest(key); 
      key = Arrays.copyOf(key, 16); // use only first 128 bit 
      System.out.println(key.length); 
      System.out.println(new String(key,"UTF-8")); 
      secretKey = new SecretKeySpec(key, "AES"); 


     } catch (NoSuchAlgorithmException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 




    } 

    public static String getDecryptedString() { 
     return decryptedString; 
    } 

    public static void setDecryptedString(String decryptedString) { 
     AES.decryptedString = decryptedString; 
    } 

    public static String getEncryptedString() { 
     return encryptedString; 
    } 

    public static void setEncryptedString(String encryptedString) { 
     AES.encryptedString = encryptedString; 
    } 

    public static String encrypt(String strToEncrypt) 
    { 
     try 
     { 
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 

      cipher.init(Cipher.ENCRYPT_MODE, secretKey); 


      setEncryptedString(Base64.encodeBase64String(cipher.doFinal(strToEncrypt.getBytes("UTF-8")))); 

     } 
     catch (Exception e) 
     { 

      System.out.println("Error while encrypting: "+e.toString()); 
     } 
     return null; 

    } 

    public static String decrypt(String strToDecrypt) 
    { 
     try 
     { 
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); 

      cipher.init(Cipher.DECRYPT_MODE, secretKey); 
      setDecryptedString(new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt)))); 

     } 
     catch (Exception e) 
     { 

      System.out.println("Error while decrypting: "+e.toString()); 

     } 
     return null; 
    } 


    public static void main(String args[]) 
    { 

       final String strToEncrypt = "My text to encrypt"; 
       final String strPssword = "encryptor key"; 
       AES.setKey(strPssword); 

       AES.encrypt(strToEncrypt.trim()); 

       System.out.println("String to Encrypt: " + strToEncrypt); 
       System.out.println("Encrypted: " + AES.getEncryptedString()); 

       final String strToDecrypt = AES.getEncryptedString(); 
       AES.decrypt(strToDecrypt.trim()); 

       System.out.println("String To Decrypt : " + strToDecrypt); 
       System.out.println("Decrypted : " + AES.getDecryptedString()); 

    } 

} 

nur zu wissen, habe ich versucht, hinzuzufügen: System Library JRE, aber nicht funktioniert ..

Vielen dank im fortgeschrittenen ......

+0

Sie müssen zunächst die Apache-Commons-Bibliothek hinzufügen. Zeigen Sie außerdem die Stack-Ablaufverfolgung an, die sich auf den Fehler/die Ausnahme bezieht. –

+0

download commons Bibliothek und fügen Sie Ihrem Projekt lib. [Hier] (http://www.java2s.com/Code/JarDownload/org-apache/org-apache-common-codec.jar.zip) ist ein Link zum Download von jar. – ELITE

+0

Danke für Ihre Hilfe Ich habe die Apache-Commons von dem Link hinzugefügt, den Sie hier setzen, der Fehler auf: import org.apache.commons.codec.binary.Base64; ist weg aber ich habe immer noch Fehler in den restlichen 2 Zeilen – nana

Antwort

0

Vielleicht

setDecryptedString(new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt)))); 

sollte
setDecryptedString(new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt)), 
    Charset.forName("UTF-8"))); 

Ich bezweifle es einen Unterschied machen, aber wenn Sie in Verschlüsselung explizit sind (und Sie sollten), dann sollten Sie mit der Entschlüsselung explizit sein.

In jedem Fall, etwas beschreibender als "Ich fand einen Fehler" oder "Ich habe Fehler" wäre sehr hilfreich. (Ausnahmen und Stacktraces oder die Eclipse- und/oder Compiler-Fehlermeldungen.)