import java.security.Security;
import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.bouncycastle.jce.provider.BouncyCastleProvider;//BC的提供者
public class AES
{ static String strToEnc="这里是明文内容,请把短信内容赋给它";//明文
static byte[] plainText = strToEnc.getBytes();//明文转为字节型
static String keyaes="!@#g%^&*(b_+6{}3",HexcipherText;//固定密钥,共16个字节,这个密钥可以随便设定16个字节,发送消息要传送
static byte[] key=keyaes.getBytes();//密钥转字节型
static byte[] cipherTextdes;//全局的密文变量,此处应该把密文赋给它,发送消息要传送
static byte[] iv="<>v*^2%$a^&*(_i(".getBytes();//IV随机向量
public static void main(String[] args)//主函数
{
test_Cipher(key,plainText,iv);//加密函数,参数为密钥,明文
test_Decrypt(key,HexcipherText,iv);//解密函数,参数为密钥规范后的ky,和密文
}
public static String test_Cipher(byte key[], byte data[],byte[] iv)//加密函数
{
try
{
System.out.println("\n开始生成AES密钥");
SecretKey ky2 = new SecretKeySpec(key, "AES");
IvParameterSpec ivps;
ivps = new IvParameterSpec(iv, 0, iv.length);
Cipher cipher=Cipher.getInstance("AES/CBC/PKCS5Padding");//cbc模式
//打印Cipher对象密码服务提供者信息
System.out.println("\n"+cipher.getProvider().getInfo());
//加密
System.out.println("\n开始加密");
cipher.init(Cipher.ENCRYPT_MODE,ky2,ivps);//cipher对象初始化,设置为加密
byte[] cipherText=cipher.doFinal(plainText);//结束数据加密,输出密文
cipherTextdes=cipherText;//把密文赋给全局的密文变量
HexcipherText=Base64Coder.encode(cipherTextdes);
System.out.println("加密完成,密文为:");
System.out.println(HexcipherText);
return HexcipherText;//返回密文,返回的是字符串型的密文
}
catch (Exception e)
{
System.out.println("加密出错");//这里在放入android时请去掉
return null;
}
}
public static byte[] test_Decrypt(byte key[], String datades,byte[] iv)//解密函数,要输入的密文要求为字符串形式
{
byte[] newPlainText;
byte[] data;
try
{
data=Base64Coder.decode(datades);
IvParameterSpec ivps;
ivps = new IvParameterSpec(iv, 0, iv.length);
SecretKey ky = new SecretKeySpec(key,"AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, ky,ivps);
//输出原文
newPlainText = cipher.doFinal(data);//这里在放入android时请去掉
System.out.println("解密完成,明文为:");//这里在放入android时请去掉
System.out.println(new String(newPlainText));
return newPlainText;//返回明文
}
catch (Exception e)
{
System.out.println("解密出错");//这里在放入android时请去掉
return null;
}
}
}
Java实现的AES程序
4星 · 超过85%的资源 需积分: 9 85 浏览量
2011-05-05
23:57:39
上传
评论
收藏 1.93MB RAR 举报
hukaijian
- 粉丝: 0
- 资源: 10
最新资源
- 111111111111111111
- Screenshot_2024-04-30-21-47-24-26.jpg
- Cpp1.cpp1111111111
- 利用ERP流程操作的整个订单流程.ppt
- 最新二开版本源码博客论坛源码,UI很漂亮,可切换皮肤界面.rar
- ModStartBlog现代化个人博客系统 v5.2.0源码.rar
- 带posix库的mingw编译器
- SoraAI是一款功能强大的AI助手,由OpenAI开发,以其出色的语音识别技术、广泛的知识库和高度的人工智能特性而备受瞩目
- Thinkphp开发大气响应式个人博客青春博客网站源码.rar
- 最新PHP博客网站程序源码 ThinkPHP.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈