2010-09-10 10 views
29

Używam Jasypt do szyfrowania. To jest mój kod:Jak dowiedzieć się, jaki algorytm [szyfrowanie] obsługuje moja JVM?

public class Encryptor {  
    private final static StandardPBEStringEncryptor pbeEncryptor = new StandardPBEStringEncryptor(); 
    private final static String PASSWORD = "FBL"; 
    private final static String ALGORITHM = "PBEWithMD5AndTripleDES"; 

    static{ 
     pbeEncryptor.setPassword(PASSWORD); 
     //pbeEncryptor.setAlgorithm(ALGORITHM);  
    } 

    public static String getEncryptedValue(String text){ 
     return pbeEncryptor.encrypt(text); 
    } 

    public static String getDecryptedValue(String text){ 
     return pbeEncryptor.decrypt(text); 
    } 

} 

Odkomentuj linia setAlgorithm i będzie to wyjątek

org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption uniósł excep nia. możliwą przyczyną jest używasz silnych algorytmy szyfrowania i nie masz zainstalowana Java Cryptography Ex napięcie (JCE) Nieograniczona Siła Polityka Jurysdykcja pliki w tym Java Virtual Machine

api mówi:

Ustawia algorytm być używany do szyfrowania Ustawia algorytm być używany do szyfrowania, jak PBEWithMD5AndDES.

Algorytm ten musi być poparte dostawcy JCE (jeśli podany, lub domyślnego dostawcy JVM jeśli nie), a jeśli jest obsługiwany, to mogą tryb i wyściółka również określić za to, podobnie jak ALGORYTM/MODE/PADDING.

patrz: http://www.jasypt.org/api/jasypt/apidocs/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html#setAlgorithm%28java.lang.String%29

Teraz, kiedy wypowiedzieć 'setAlgorithm' użyje domyślnego algorytmu [Myślę, że to md5], i będzie działać dobrze. Oznacza to, że md5 jest obsługiwany przez moją maszynę JVM. Teraz dowiesz się, jakie inne algorytmy szyfrowania są obsługiwane przez moją maszynę JVM.

Dzięki,

Odpowiedz

36

Następujące będzie lista wszystkich dostawców i zwolennik algorytmów. Jakiej wersji Java używasz? Jeśli nie masz starej wersji, JCE powinna być dołączona w standardzie.

import java.security.Provider; 
import java.security.Security; 

public class SecurityListings { 
    public static void main(String[] args) { 
     for (Provider provider : Security.getProviders()) { 
      System.out.println("Provider: " + provider.getName()); 
      for (Provider.Service service : provider.getServices()) { 
       System.out.println(" Algorithm: " + service.getAlgorithm()); 
      } 
     } 

    } 
} 

Edit: Każdy powód, dlaczego nie użyć standardowego rzeczy z pakietu javax.crypto?

1) Wygeneruj Key użyciu

Key key = SecretKeyFactory.getInstance(algorithm).generateSecret(new PBEKeySpec(password.toCharArray())); 

2) Utwórz Cipher użyciu

cipher = Cipher.getInstance(algorithm); 

3) Init swój szyfr z kluczem

cipher.init(Cipher.ENCRYPT_MODE, key); 

4) Czy szyfrowanie z

byte[] encrypted = cipher.doFinal(data) 
+0

używam JDK 1.6 –

+4

Zamiast: System.out.println ("algorytmu:" + service.getAlgorithm()); użyj System.out.println ("" + usługa); i będziesz mógł zobaczyć poziomy szyfrowania dostępne. Na przykład: poniższe informacje wskazują, że obsługiwane jest 128-bitowe szyfrowanie AES, ale nie 256-bitowe AES: SunJCE: Cipher.AES -> com.sun.crypto.provider.AESCipher ... ObsługiwaneModes = ECB | CBC | PCBC | CTR | CTS | CFB | OFB | CFB8 | CFB16 | CFB24 | CFB32 | CFB40 | CFB48 | CFB56 | CFB64 | OFB8 | OFB16 | OFB24 | OFB32 | OFB40 | OFB48 | OFB56 | OFB64 | CFB72 | CFB80 | CFB88 | CFB96 | CFB104 | CFB112 | CFB120 | CFB128 | OFB72 | OFB1 | | OFB120 | OFB128} –

+0

Lista kodów zawiera wiele algorytmów, których nie można użyć. Niezbyt pomocny kod. – Jonas

1

Nadal jest pytanie "oczekujące" zadane przez Qwerky'ego: dlaczego używać Jasypt zamiast używać javax.crypto?

Cóż, polecam używanie Jasiupta, ponieważ jest to prosty sposób na kryptografię dla początkujących i wysoce konfigurowalny dla doświadczonych użytkowników.

Z Jasiuptem możesz szybko zacząć korzystać z javax.crypto, mając niewielką wiedzę na temat JCE i kryptografii. Niezależnie od tego, czy chcesz zarządzać hasłami użytkowników, czy szyfrować/odszyfrowywać dane, struktura zapewnia prostą abstrakcję tego pytania.

W tym samym czasie ramy udostępniają wszystkie możliwości specyfikacji JCE, aby umożliwić doświadczonym użytkownikom pełną kontrolę.

Poza tym, Jasypt zapewnia wiele innych funkcji out-of-the-box dla znanych pytań (dotyczących poufnych danych przechowywanych w bazie danych, ...)

+0

Jeśli chce zadać pytanie, nie powinien umieszczać go w odpowiedzi. To nie jest wątek dyskusji – Mick

4

Narzędzie wiersza poleceń Jasypt teraz przychodzi ze skryptem do zrobienia tego o nazwie listAlgorithms.bat dla systemu Windows i listAlgorithms.sh dla systemu Linux.

można znaleźć instrukcje, jak pobrać i używać go tutaj: http://www.jasypt.org/cli.html#Listing_algorithms

2

Próbowałem kodu zamieszczonych przez @Qwerky, ale nie jest to bardzo pomocne. Dodałem najnowszego dostawcę BouncyCastle, a uzyskane wyniki były bardzo mylące. Pokazuje to bardziej szczegółowo, kto jest dostawcą, wersją oraz typem i nazwą algorytmu.

for (Provider provider : Security.getProviders()) { 
    System.out.println("Provider: " + provider.getName() + " version: " + provider.getVersion()); 
    for (Provider.Service service : provider.getServices()) { 
     System.out.printf(" Type : %-30s Algorithm: %-30s\n", service.getType(), service.getAlgorithm()); 
    } 
} 
Powiązane problemy