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 ;
}
}
我正在使用java 1.8版本获得不受支持的异常 如果我错了可以帮助我如何实现“AES / CCM / PKCS5Padding” 有必要为加密添加IV矢量规范
答案 0 :(得分:2)
我知道这已经很晚了,对不起 - 我一直在研究如何自己做AES / CCM。
无论如何,bouncycastle API支持CCM。如果您还没有它,那么添加它非常简单,因为它只是一个.jar文件。您可以访问java下载页面here以获取.jar。
但是,您可以通过运行以下代码来查看当前的安全提供程序:
Provider[] providers = Security.getProviders();
for (int i = 0; i < providers.length; i++){
Log.e("Provider", "Name: " + providers[i].getName() + " Version: " + providers[i].getVersion());
}
我得到以下输出:
经过快速搜索后,它已经非常明显了,但是&#34; BC版本:1.52&#34;是Bouncy Castle。
我还找到了一个示例.pdf表示&#34; PKCS7Padding通常也被称为PKCS5Padding。&#34;我没有使用填充,所以我必须让你对此进行研究。你可以找到那篇文章here。引用在第17页,但您可以使用CTRL-F更快地找到它,然后粘贴到PKCS5Padding中。这些例子只有CBC和EBC。
作为旁注,您可以在this页面上看到支持PKCS。
我希望这有帮助!
答案 1 :(得分:0)
由于全局安全问题,默认JRE不包括对更高级加密的支持。您必须下载“无限安全”补丁 - 当前链接为http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
下载补丁并按照其中包含的README.TXT
文件中的说明进行操作。
只允许位于“受制裁”国家/地区的客户下载该修补程序。
当然没有机会使用VPN来躲避这种限制,或者通过文件共享软件提供补丁。