如何找出我的JVM支持哪种算法[加密]?

2022-09-01 09:41:47

我正在使用Jasypt进行加密。这是我的代码:

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

}

取消注释该行,它将引发异常setAlgorithm

org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption 引发了一个例外。可能的原因是您正在使用强加密算法,并且您尚未在此 Java 虚拟机中安装 Java 加密 Ex tension (JCE) 无限强度管辖权策略文件

阿比 说:

设置要用于加密的算法 设置要用于加密的算法,如 PBEWithMD5AndDES。

此算法必须由您的 JCE 提供程序支持(如果您指定一个,或者如果您不指定一个,则默认 JVM 提供程序),并且,如果它受支持,您还可以为其指定模式和填充,例如 ALGORITHM/MODE/PADDING。

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

现在,当您评论“setAlgorithm”时,它将使用默认算法[我猜它是md5 ],并且它将正常工作。这意味着我的JVM支持md5。现在,如何找出我的JVM支持的其他加密算法。

谢谢


答案 1

下面将列出所有提供程序和算法支持者。您使用的是哪个版本的 Java?除非您使用的是旧版本,否则应将JCE作为标准包含在内。

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

    }
}

编辑:你为什么不使用javax.crypto软件包中的标准内容?

1) 生成一个使用Key

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

2) 创建一个使用Cipher

cipher = Cipher.getInstance(algorithm);  

3)使用密钥初始化您的密码

cipher.init(Cipher.ENCRYPT_MODE, key);  

4)使用

byte[] encrypted = cipher.doFinal(data)

答案 2

Jasypt命令行工具现在附带了一个脚本,用于执行此操作,适用于Windows和Linux。listAlgorithms.batlistAlgorithms.sh

您可以在此处找到有关如何下载和使用它的说明:http://www.jasypt.org/cli.html#Listing_algorithms


推荐