Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
“我正在努力”;AES/CCM/PKCS5P添加;java中的加密,但我遇到了一些例外,有人能帮我如何使用CCM代码进行加密吗_Java_Encryption_Aes_Jce - Fatal编程技术网

“我正在努力”;AES/CCM/PKCS5P添加;java中的加密,但我遇到了一些例外,有人能帮我如何使用CCM代码进行加密吗

“我正在努力”;AES/CCM/PKCS5P添加;java中的加密,但我遇到了一些例外,有人能帮我如何使用CCM代码进行加密吗,java,encryption,aes,jce,Java,Encryption,Aes,Jce,我在使用java 1.8版本时遇到不受支持的异常 如果我错了,可以帮助我如何实现“AES/CCM/PKCS5P添加” 有必要为加密添加IV向量规范我知道这已经很晚了,很抱歉-我自己一直在研究如何进行AES/CCM 无论如何,BouncyCastleAPI支持CCM。如果您还没有,添加它非常简单,因为它只是一个.jar文件。您可以转到java下载页面获取.jar 但是,您可以通过运行以下代码查看当前的安全提供程序: public class AESCCMEncryption { publ

我在使用java 1.8版本时遇到不受支持的异常 如果我错了,可以帮助我如何实现“AES/CCM/PKCS5P添加”
有必要为加密添加IV向量规范

我知道这已经很晚了,很抱歉-我自己一直在研究如何进行AES/CCM

无论如何,BouncyCastleAPI支持CCM。如果您还没有,添加它非常简单,因为它只是一个.jar文件。您可以转到java下载页面获取.jar

但是,您可以通过运行以下代码查看当前的安全提供程序:

public class AESCCMEncryption {
     public static int AES_KEY_SIZE = 128 ;
     public static int TAG_BIT_LENGTH = 128 ;
     public static String ALGO_TRANSFORMATION_STRING = "AES/CCM/PKCS5Padding" ;
     public static void main(String[] args) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {


    SecretKey aesKey = null ;
    String message="messageToEncrypt";
    try {
        KeyGenerator keygen = KeyGenerator.getInstance("AES") ;  
        keygen.init(AES_KEY_SIZE) ; 
        aesKey = keygen.generateKey() ;
    } catch(NoSuchAlgorithmException noSuchAlgoExc) { System.out.println("Key being request is for AES algorithm, but this cryptographic algorithm is not available in the environment "  + noSuchAlgoExc) ; System.exit(1) ; }
    byte[] encryptedText = aesEncrypt(message, aesKey) ;
    byte[] decryptedText = aesDecrypt(encryptedText, aesKey) ; 

    System.out.println("Decrypted text " + new String(decryptedText)) ;

}
     public static byte[] aesEncrypt(String message, SecretKey aesKey) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
         Cipher c = null ;
                c = Cipher.getInstance(ALGO_TRANSFORMATION_STRING); 
                c.init(Cipher.ENCRYPT_MODE, aesKey) ;
                byte[] cipherTextInByteArr = null ;
               cipherTextInByteArr = c.doFinal(message.getBytes()) ;
              return cipherTextInByteArr ;
 } 
     public static byte[] aesDecrypt(byte[] encryptedMessage, SecretKey aesKey) throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException {
         Cipher c = null ;
              c = Cipher.getInstance(ALGO_TRANSFORMATION_STRING); // Transformation specifies algortihm, mode of operation and padding
              c.init(Cipher.DECRYPT_MODE, aesKey) ;
              byte[] plainTextInByteArr = null ;
              plainTextInByteArr = c.doFinal(encryptedMessage) ;
          return plainTextInByteArr ;
       }
}
Provider[]providers=Security.getProviders();
for(int i=0;i
我得到以下输出:

经过快速搜索,这已经很明显了,但“BC版本:1.52”是一个有弹性的城堡

我还发现了一个示例.pdf,上面写着“PKCS7Padding通常也被称为PKCS5Padding”。我没有使用padding,所以我不得不让你做这方面的研究。你可以找到那篇文章。报价单在第17页,但您可能可以使用CTRL-F更快地找到它,然后粘贴到PKCS5P中。不过,这些示例仅限于CBC和EBC

作为旁注,您可以在第页看到PKCS是受支持的


我希望这有帮助

出于全局安全考虑,默认JRE不支持更高级的加密。您必须下载“无限安全”补丁-当前链接为

下载修补程序并按照其中包含的
README.TXT
文件中的说明进行操作

只有位于“受制裁”国家/地区的客户端才允许下载修补程序


当然,use将不可能使用VPN来规避该限制,或者该修补程序可通过文件共享软件获得。

您需要找到支持CCM模式的安全提供商。默认的Sun JCE不能做到这一点。Oracle-前身为Sun Java的无限策略只影响超过128位的密钥大小/强度,与此问题无关,尽管这是解决其他一些问题的好办法。是的,JCE使用名称PKCS5Padding表示真正的PKCS7(在大多数情况下),但CCM根本不使用任何填充。使用BC确实是一个答案,可能是最好的答案,尽管通过一些工作可以用CTR+CBCMAC构建CCM。
        Provider[] providers = Security.getProviders();
        for (int i = 0; i < providers.length; i++){
            Log.e("Provider", "Name: " + providers[i].getName() + " Version: " + providers[i].getVersion());
        }