为什么没有Java实现的Aes加密算法

Python08

为什么没有Java实现的Aes加密算法,第1张

需要依赖Java加密扩展的支持才能实现。

用Java实现AES需要依赖Java加密扩展TheJavaCryptographyExtension,简称JCE的支持主要是在javax下面的一些包。根据描述需要使用的算法为AESCBCNoPadding。

Java语言的语法与C语言和C加加语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C加加中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。

JDK对DESede算法的支持

密钥长度:128位

工作模式:ECB/CBC/PCBC/CTR/CTS/CFB/CFB8 to CFB128/OFB/OBF8 to OFB128

填充方式:Nopadding/PKCS5Padding/ISO10126Padding/

AES加密解密的java实现:

package com.kongxincai.encanddecimport java.security.Keyimport java.security.NoSuchAlgorithmExceptionimport javax.crypto.Cipherimport javax.crypto.KeyGeneratorimport javax.crypto.SecretKeyimport javax.crypto.spec.SecretKeySpecpublic class AESCoder {   private static final String KEY_ALGORITHM = "AES"  private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding"//默认的加密算法

public static byte[] initSecretKey() {       //返回生成指定算法密钥生成器的 KeyGenerator 对象

KeyGenerator kg = null      try {

kg = KeyGenerator.getInstance(KEY_ALGORITHM)

} catch (NoSuchAlgorithmException e) {

e.printStackTrace()          return new byte[0]

}       //初始化此密钥生成器,使其具有确定的密钥大小       //AES 要求密钥长度为 128

kg.init(128)      //生成一个密钥

SecretKey  secretKey = kg.generateKey()      return secretKey.getEncoded()

}   private static Key toKey(byte[] key){       //生成密钥

return new SecretKeySpec(key, KEY_ALGORITHM)

}   public static byte[] encrypt(byte[] data,Key key) throws Exception{       return encrypt(data, key,DEFAULT_CIPHER_ALGORITHM)

}   public static byte[] encrypt(byte[] data,byte[] key) throws Exception{       return encrypt(data, key,DEFAULT_CIPHER_ALGORITHM)

}   public static byte[] encrypt(byte[] data,byte[] key,String cipherAlgorithm) throws Exception{       //还原密钥

Key k = toKey(key)      return encrypt(data, k, cipherAlgorithm)

}   public static byte[] encrypt(byte[] data,Key key,String cipherAlgorithm) throws Exception{       //实例化

Cipher cipher = Cipher.getInstance(cipherAlgorithm)      //使用密钥初始化,设置为加密模式       cipher.init(Cipher.ENCRYPT_MODE, key)      //执行操作

return cipher.doFinal(data)

}   public static byte[] decrypt(byte[] data,byte[] key) throws Exception{       return decrypt(data, key,DEFAULT_CIPHER_ALGORITHM)

}   public static byte[] decrypt(byte[] data,Key key) throws Exception{       return decrypt(data, key,DEFAULT_CIPHER_ALGORITHM)

}   public static byte[] decrypt(byte[] data,byte[] key,String cipherAlgorithm) throws Exception{       //还原密钥

Key k = toKey(key)      return decrypt(data, k, cipherAlgorithm)

}   public static byte[] decrypt(byte[] data,Key key,String cipherAlgorithm) throws Exception{       //实例化

Cipher cipher = Cipher.getInstance(cipherAlgorithm)      //使用密钥初始化,设置为解密模式       cipher.init(Cipher.DECRYPT_MODE, key)      //执行操作

return cipher.doFinal(data)

}   private static String  showByteArray(byte[] data){       if(null == data){           return null

}

StringBuilder sb = new StringBuilder("{")      for(byte b:data){

sb.append(b).append(",")

}

sb.deleteCharAt(sb.length()-1)

sb.append("}")      return sb.toString()

}   public static void main(String[] args) throws Exception {       byte[] key = initSecretKey()

System.out.println("key:"+showByteArray(key))

Key k = toKey(key)//生成秘钥

String data ="AES数据"

System.out.println("加密前数据: string:"+data)

System.out.println("加密前数据: byte[]:"+showByteArray(data.getBytes()))

System.out.println()      byte[] encryptData = encrypt(data.getBytes(), k)//数据加密

System.out.println("加密后数据: byte[]:"+showByteArray(encryptData))//       System.out.println("加密后数据: hexStr:"+Hex.encodeHexStr(encryptData))      System.out.println()      byte[] decryptData = decrypt(encryptData, k)//数据解密

System.out.println("解密后数据: byte[]:"+showByteArray(decryptData))

System.out.println("解密后数据: string:"+new String(decryptData))

}

}