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

前端 未结 5 1302
执笔经年
执笔经年 2020-12-23 16:51

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

public class Encryptor {    
    private final static StandardPBEStringEncryptor pbeEncryptor = new Standa         


        
相关标签:
5条回答
  • 2020-12-23 17:34

    There is still a 'pending' question asked by Qwerky: why using Jasypt instead of using javax.crypto?

    Well, I would recommend using Jasypt as it is a simple way to crypto for beginners and highly configurable for experienced users.

    With Jasypt, you can start taking benefit of javax.crypto quickly with a little knowledge of JCE and the cryptography. Whether you want to manage user passwords or encrypt/decrypt data, the framework provides a simple abstraction to the question.

    In the same time, the framework exposes all the possibilities of the JCE specification to allow experienced users to be in full control.

    In addition to this, Jasypt provides many more features out-of-the-box for well known questions (dealing with sensitive data stored in the database, ...)

    0 讨论(0)
  • 2020-12-23 17:39

    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)
    
    0 讨论(0)
  • 2020-12-23 17:41

    The Jasypt command line tool now comes with a script for doing this called listAlgorithms.bat for windows and listAlgorithms.sh for Linux.

    You can find instructions on how to download and use it here: http://www.jasypt.org/cli.html#Listing_algorithms

    0 讨论(0)
  • 2020-12-23 17:46

    If you don't have it installed already, then you need to install the JCE (Java Cryptography Extension) which provides support for the algorithms.

    You can see how to install here:

    http://download.oracle.com/javase/1.4.2/docs/guide/security/CryptoSpec.html#ProviderInstalling

    The library can be found here: http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136007.html

    0 讨论(0)
  • 2020-12-23 17:47

    I tried the code posted by @Qwerky, but it's not very helpful. I had added the latest BouncyCastle provider, and the results I got were very confusing. This shows in better detail who's the provider, version, and the algorithm type and name.

    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());
        }
    }
    
    0 讨论(0)
提交回复
热议问题