“我正在努力”;AES/CCM/PKCS5P添加;java中的加密,但我遇到了一些例外,有人能帮我如何使用CCM代码进行加密吗
我在使用java 1.8版本时遇到不受支持的异常 如果我错了,可以帮助我如何实现“AES/CCM/PKCS5P添加”“我正在努力”;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
有必要为加密添加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());
}