2014-09-19 28 views
6

Her biri birbiriyle uyumlu olacak şekilde bir dizeyi şifreleyip/şifresini çözdüğü birkaç kütüphane, C#, PHP ve Android var, yani C# veri yazıyor ve şifreler bir veritabanına ve PHP'ye şifresini çözebilir ve orijinal dizgiyi döndürebilir.AES-256 ve PKCS7Padding, Java'da başarısız oluyor

Şimdi standart bir Java uygulamasıyla aynı şeyi yapmam gerekiyor, bu yüzden Android kütüphanemden kodu aldım ve kütüphanelere ihtiyacım var ama bir istisna alıyorum. Bildiğim kadarıyla kod android spesifik değildi, bu yüzden sorun olmamalı. Aşağıda

ben aşağıdaki özel durum alıyorum Encryption.encrypt("myString"); çağırdığınızda benim şifreleme fonksiyonu

public static String encrypt(String plainPasword) 
    { 
      String password = ""; 
      try 
      { 
       SecretKeySpec key = new SecretKeySpec("hcxilkqbbhczfeultgbskdmaunivmfuo".getBytes("US-ASCII"), "AES"); 
       IvParameterSpec iv = new IvParameterSpec("ryojvlzmdalyglrj".getBytes("US-ASCII")); 

       Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); 

       cipher.init(Cipher.ENCRYPT_MODE, key, iv); 

       byte[] encoded = cipher.doFinal(plainPasword.getBytes()); 
       password = new String(Base64.encodeBase64(encoded)); 

      } 
      catch (Exception ex) 
      { 
       System.err.println("Encryption Exception: " + ex.toString()); 
      } 
      return password; 
    } 

geçerli:

Encryption Exception: java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/PKCS7Padding 

Bu kod Android'de iyi çalışıyor ve herhangi yapmamalı söylediği gibi Nerede koşuyorsa fark.

Sağladığınız her türlü yardım için teşekkür ederiz.

GÜNCELLEME

Ben yorumum bir bağlantı 7 sayesinde yerine PKCS5Padding ihtiyacı olduğunu gördük. Şimdi aşağıdaki özel durum alma gerçi ben: Java

Encryption Exception: java.security.InvalidKeyException: Illegal key size 
+1

http://stackoverflow.com/questions/10193567/java-security-nosuchalgorithmexception-cannot-find-any-provider-supporting-aes – srkavin

+0

Ben googled zaman teşekkürler Ben şimdi değişti rağmen bir şey bulamadık Şimdi anahtarın geçersiz bir boyut olduğunu bildiriyor. – Boardy

+0

Sınırsız güçte JCE ilke dosyalarına ihtiyacınız olacak. http://deveshsharma.info/2012/10/09/fixing-java-security-invalidkeyexception-illegal-key-size-exception/ – srkavin

cevap

16

Birincisi, standart dolgu adı PKCS5Padding, PKCS7Padding değildir. Java aslında PKCS # 7 dolgu yapıyor, ancak JCA belirtiminde, PKCS5Padding verilen addır.

Ardından, AES-256'yı kullanmaya çalışıyorsunuz, bu nedenle Unlimited Strength Jurisdiction ilke dosyalarını yüklemeniz gerekir.

Umarım bu bir örnektir ve her mesaj için aynı IV'ü kullanmıyorsunuz değil mi?

+0

Sadece bir örnek, politikaları kopyaladım ama hala aynı versiyonu alıyorum – Boardy

+0

Muhtemelen yanlış sürüme sahipsin ya da yanlış yere koydun. Daha fazla ayrıntı sağlamanız ya da yaptığınız şeyi dikkatlice gözden geçirmeniz gerekecek. – erickson

+1

Sorunu buldum. Dosyaları Program Files \ Java \ jre \ ... içine kopyalamıştım ama JDK dizininin içinde bir jre kullanıyordum. Dosyaları buraya kopyaladım ve şimdi çalışıyor. Yardım ettiğin için teşekkür ederim. Yine de bana biraz garip Android neden bu sorunların hiçbiri, ben aynı kütüphaneyi kullandığım gibi – Boardy