Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find out what algorithm [ encryption ] are supported by my JVM?

I am using Jasypt for encryption. This is my code:

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 );     }  } 

Uncomment the setAlgorithm line and it will throw an exception

org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption raised an excep tion. A possible cause is you are using strong encryption algorithms and you have not installed the Java Cryptography Ex tension (JCE) Unlimited Strength Jurisdiction Policy Files in this Java Virtual Machine

api says:

Sets the algorithm to be used for encryption Sets the algorithm to be used for encryption, like PBEWithMD5AndDES.

This algorithm has to be supported by your JCE provider (if you specify one, or the default JVM provider if you don't) and, if it is supported, you can also specify mode and padding for it, like ALGORITHM/MODE/PADDING.

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

Now, when you comment 'setAlgorithm' it will use the default Algorithm [ i guess it is md5 ], and it will work fine. That means md5 is supported by my JVM. Now, how to find out what other encryption algorithms are supported by my JVM.

Thanks,

like image 209
Rakesh Juyal Avatar asked Sep 10 '10 08:09

Rakesh Juyal


People also ask

What algorithm does Jasypt use?

Jasypt by itself does not implement any algorithms, but it lets you use any JCE provider of your choice. AES (encryption) is supported by the Sun JCE provider since Java 8, and it can be used by Jasypt since version 1.9.

Which encryption algorithm is best in Java?

RC4 - Key size from 40-bit to 1024-bit, RC4 is the fastest java supported encryption algorithm.

Which type of algorithm encrypts data bit by bit?

The correct answer is stream cipher.


1 Answers

The following will list all the providers and the algorithms supporter. What version of Java are you using? Unless you're on an old version JCE should be included as standard.

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: Any reason why you don't use the standard stuff from the javax.crypto package?

1) Generate a Key using

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

2) Create a Cipher using

cipher = Cipher.getInstance(algorithm);   

3) Init your cipher with the key

cipher.init(Cipher.ENCRYPT_MODE, key);   

4) Do the encrypting with

byte[] encrypted = cipher.doFinal(data) 
like image 54
Qwerky Avatar answered Oct 08 '22 02:10

Qwerky