Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何查找和验证JDK安全提供商的加密强度?_Java_Security_Encryption - Fatal编程技术网

Java 如何查找和验证JDK安全提供商的加密强度?

Java 如何查找和验证JDK安全提供商的加密强度?,java,security,encryption,Java,Security,Encryption,我有一个小程序,可以打印出JDK安装中所有受支持的提供程序,但我想知道是否有人知道我如何更改这个程序,以同时打印出每个提供程序的“强度” import java.security.Provider; import java.security.Security; public class SecurityListings { public static void main(String[] args) { for (Provider provider : Securi

我有一个小程序,可以打印出JDK安装中所有受支持的提供程序,但我想知道是否有人知道我如何更改这个程序,以同时打印出每个提供程序的“强度”

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

      } 
    } 
  }

} 

传入转换,它将返回允许的最高密钥

这是一张简单的支票

public bool isUnlimitedKeyStrength() {
    return Cipher.getMaxAllowedKeyLength("AES") == Integer.MAX_VALUE;
}

感谢Andrew Finnell的帮助,Groovy脚本回答了这个问题:

import javax.crypto.Cipher
import java.security.*
import javax.crypto.*
// Groovy script
class SecurityTests {    
    static void main(String[] args) {       
        for (Provider provider : Security.getProviders())
        {
            System.out.println("Provider: " + provider.getName())
            for (Provider.Service service : provider.getServices() )
            {
                int maximum = 0;
                String alg = service.getAlgorithm()
                if ( getKeyStrength( alg ) == 2147483647 ) { 
                  System.out.println(" Algorithm: " + alg +
                    ", max" ) 
                } else {
                  System.out.println(" Algorithm: " + alg +
                    ", " + getKeyStrength( alg ) ) 
                }    
            }
        }       
    }
    static int getKeyStrength( cipher ) {       
        int max     
        try {
            max = Cipher.getMaxAllowedKeyLength( cipher)
        } catch (NoSuchAlgorithmException e) {
            e.getLocalizedMessage()
            return 0
        }       
        return max
    }
}
和一个windows批处理文件来运行它:

@echo off

set JAVA_HOME1=C:\jdk1.6.0_31
set JAVA_HOME2=C:\jdk1.6.0_16

ECHO Listings from %JAVA_HOME1%
groovy.exe --javahome %JAVA_HOME1% SecurityListings.groovy > 31.result.txt

ECHO Listings from %JAVA_HOME2%
groovy.exe --javahome %JAVA_HOME2% SecurityListings.groovy > 16.result.txt

pause

力量是如何定义的?最大钥匙尺寸?是的,我想是的。我只是想确保我已经加载了国内的强加密。我想我可以通过编写一个简单的单元测试来解决这个问题,该测试尝试加载一个强加密,然后使用Assert通过/失败测试。