android -------- AES加密解密算法
AES加密标准又称为高级加密标准Rijndael加密法,是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。AES的基本要求是,采用对称分组密码体制,密钥长度可以为128、192或256位,分组长度128位,算法应易在各种硬件和软件上实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。
AES是一种对称的加密算法,可基于相同的密钥进行加密和解密
这个网上有很多种写法,
我就在网上找了两种作为参考
1:秘钥必须为16位字符串
// 加密
public static String Encrypt(String sSrc, String sKey) throws Exception {
if (sKey == null) {
System.out.print("Key为空null");
return null;
}
// 判断Key是否为16位
if (sKey.length() != 16) {
System.out.print("Key长度不是16位");
return null;
}
byte[] raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
//此处使用BASE64做转码功能,同时能起到2次加密的作用。
//return new Base64().encodeToString(encrypted);
return Base64.encode(encrypted);
} // 解密
public static String Decrypt(String sSrc, String sKey) throws Exception {
try {
// 判断Key是否正确
if (sKey == null) {
System.out.print("Key为空null");
return null;
}
// 判断Key是否为16位
if (sKey.length() != 16) {
System.out.print("Key长度不是16位");
return null;
}
byte[] raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
//先用base64转码
//byte[] encrypted1 = new Base64().decode(sSrc);
byte[] encrypted1 = Base64.decode(sSrc);
try {
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original,"utf-8");
return originalString;
} catch (Exception e) {
System.out.println(e.toString());
return null;
}
} catch (Exception ex) {
System.out.println(ex.toString());
return null;
}
}
2:加密解密的秘钥没有长度限制
//加密
public static String encrypt(String content, String password) {
try {
//将秘钥补全为128位
KeyGenerator kgen = KeyGenerator.getInstance("AES");
//若想改为DES加密,则需要将秘钥位数改为64位
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
//创建密码器
Cipher cipher = Cipher.getInstance("AES");
byte[] byteContent = content.getBytes("utf-8");
//初始化
cipher.init(Cipher.ENCRYPT_MODE, key);
//加密
byte[] result = cipher.doFinal(byteContent);
//Base64转码
return Base64.encode(result);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
} //解密
public static String decrypt(String content, String password) throws Exception {
try {
//将秘钥补全为128位
KeyGenerator kgen = KeyGenerator.getInstance("AES");
//若想改为DES加密,则需要将秘钥位数改为64位
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
//创建密码器
Cipher cipher = Cipher.getInstance("AES");
//初始化
cipher.init(Cipher.DECRYPT_MODE, key);
//Base64转码
byte[] encrypted1 = Base64.decode(content);
//解密
byte[] result = cipher.doFinal(encrypted1);
//二进制转为字符串
return new String(result, "utf-8");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
main方法
//使用
public static void main(String[] args) throws Exception {
//秘钥--16位
//AES和DES同属对称加密算法
//
String cKey = "abcdefghabcdefgh";
//需要加密的字串
String cSrc = "Hello 小笨蛋";
System.out.println(cSrc);
//加密
String enString = DESAES.Encrypt(cSrc, cKey);
System.out.println("加密后的字串是:" + enString);
//解密
String DeString = DESAES.Decrypt(enString, cKey);
System.out.println("解密后的字串是:" + DeString); String keyN = "123456789"; String content = encrypt(cSrc,keyN);
System.out.println("加密后的字串是:" + content);
System.out.println("加密后的字串是:" + decrypt(content,keyN));
}
日志:

android -------- AES加密解密算法的更多相关文章
- php与java通用AES加密解密算法
AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的 ...
- AES加密解密算法---java
package com.BFGJ.AES; import java.util.Random; import java.util.StringTokenizer; import javax.crypto ...
- android AES 加密解密
import java.security.Provider; import java.security.SecureRandom; import javax.crypto.Cipher; import ...
- C# AES加密解密算法
/// <summary> /// AES加密 /// </summary> /// <param name="encryptStr">明文&l ...
- AES加密解密算法
class Aes { /** * AES加密 * @param $data * @param $secret_key * @return string */ public static functi ...
- C与C#之间使用AES加密解密算法
目的:C语言写的客户端加密数据,数据发送到C#写的服务端,服务端解密. 保证C与C#之间加密解密AES的配置和模式一直. AES: AES是对称加密算法,关键点: 密钥长度,明文长度,密文长度 密钥长 ...
- android -------- RSA加密解密算法
RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用 RSA公开密钥密码体制.所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计 ...
- android -------- DES加密解密算法
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信 ...
- android -------- Base64 加密解密算法
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规范. Ba ...
随机推荐
- 事务@Transactional
在service类前加上@Transactional,声明这个service所有方法需要事务管理.每一个业务方法开始时都会打开一个事务. Spring默认情况下会对运行期例外(RunTimeExcep ...
- selenium常用的API(五)获取title、刷新、前进和后退
获取网页title的属性值 #encoding=utf-8 from selenium import webdriver import unittest import time class Visit ...
- Json在序列化getter导致的问题
Java中的Json序列化,不容忽视的getter 问题重现 public class AjaxJson { private boolean success; private String msg; ...
- (生鲜项目)05. RESTful api, 和 VUE
第一步: 什么是 RESTful api 总结: 使用http协议作为介质, 达到客户端修改服务器端资源的目的, 服务器只需要提供指定的api接口, 客户端根据http协议中的post/get/put ...
- LeetCode 826. Most Profit Assigning Work
原题链接在这里:https://leetcode.com/problems/most-profit-assigning-work/ 题目: We have jobs: difficulty[i] is ...
- 14.go内置的rate包学习2(有花操作,必看)
package main import ( "fmt" "golang.org/x/time/rate" "time" ) func mai ...
- IDEA-相关插件使用
IDEA日常开发中,整理一些用到的插件,以便后续使用起来方便. 点击File-Settings->Plugins. 1.进度条-彩虹,搜索Nyan字样,如图所示(本人已安装),点击Install ...
- zzulioj - 2619: 小新的信息统计
题目链接:http://acm.zzuli.edu.cn/problem.php?id=2619 题目描述 马上就要新生赛了,QQ群里正在统计所有人的信息,每个人需要从群里下载文件,然后 ...
- 在x64计算机上捕获32位进程的内存转储
这是一个我经常遇到的问题,我们经常会遇到这样的情况:我们必须重新捕获内存转储,因为内存转储是以“错误”的方式捕获的.简而言之:如果在64位计算机上执行32位进程,则需要使用允许创建32位转储的工具捕获 ...
- 洛谷 P1629 邮递员送信 题解
P1629 邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要 ...