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

ぐ巨炮叔叔 提交于 2019-11-29 22:13:26
Qwerky

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)

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

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

mjuarez

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

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, ...)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!