收银台数据库存储AES加解密
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法
加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。
加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC和EIGamal
/**
* @company xmh
* @version V1.0
*/
package xmh.common.security.aes;
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import xmh.common.security.base64.Base64Util;
/**
* @ClassName: CashierAesUtils
* @Description: 收银台数据库存储AES加解密
* @date 2015年5月13日 下午2:19:53
*/
public class CashierAesUtils {
private static String keyStr = "xxx";
private static String charset="utf-8";
private static Key key = null;
private static String[] g = new String[4];
public static String encryptStr(String value){
String valueSecurity = encodeMessage(value);
String[] l = new String[4];
int sum = valueSecurity.length()/4;
for(int i=0;i<4;i++){
l[i] = valueSecurity.substring(i*sum, sum*(i+1));
}
StringBuffer sb = new StringBuffer();
for(int i=2;i>=0;i--){
sb.append(l[i]+g[i]);
}
sb.append(g[3] + l[3]);
return sb.toString();
}
public static String decryptStr(String value){
String[] l = new String[4];
int sum = value.length()/4;
for(int i=0;i<4;i++){
l[i] = value.substring(i*sum, sum*(i+1));
}
StringBuffer sb = new StringBuffer();
for(int i=2;i>=0;i--){
sb.append(l[i].substring(0, l[i].length()-1));
}
value = sb.append(l[3].substring(1, l[3].length())).toString();
return decodeMessage(value);
}
static{
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG","SUN");
secureRandom.setSeed(keyStr.getBytes());
keyGenerator.init(secureRandom);
key = keyGenerator.generateKey();
int a = 0;
for(int i=0;i<4;i++){
a = i*4;
if(a>keyStr.length()){
a = 0;
}
g[i] = String.valueOf(keyStr.charAt(i*4));
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String encodeMessage(String message){
String result = null;
try {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] temp = cipher.doFinal(message.getBytes(charset));
result = Base64Util.encodeMessage(temp);
}catch (Exception e) {
e.printStackTrace();
}
return result;
}
private static String decodeMessage(String message){
String result = null;
try {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] temp = cipher.doFinal(Base64Util.decodeMessage(message));
result = new String(temp,charset);
}catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
收银台数据库存储AES加解密的更多相关文章
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
.net mvc 站点自带简易SSL加密传输 因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...
- c# Aes加解密和对象序列化
aes加解密 public class AesCryptto { private string key = "hjyf57468jhmuist"; private string i ...
- AES加解密算法Qt实现
[声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...
- aes加解密前后端-后台
一.web.xml: <filter> <filter-name>fastLoginFilter</filter-name> <filter-class> ...
- DES,AeS加解密,MD5,SHA加密
1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...
- Java、C#双语版配套AES加解密示例
这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...
- aes加解密 Illegal key size
做aes加密时,发生一个奇怪的错误,在本地环境是好的,发布到测试环境就出问题, java.security.InvalidKeyException: Illegal key size 想到本地环境之前 ...
- C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密
前言: RSA算法是利用公钥与密钥对数据进行加密验证的一种算法.一般是拿私钥对数据进行签名,公钥发给友商,将数据及签名一同发给友商,友商利用公钥对签名进行验证.也可以使用公钥对数据加密,然后用私钥对数 ...
- Aes加解密,php
Aes类库 <?php namespace Aes; class Aes { /** * var string $method 加解密方法,可通过openssl_get_cipher_metho ...
随机推荐
- css如何实现一个元素高度固定宽度按比例显示?
用padding-top百分比可以实现宽度固定高度按比例展示,现在的需求是对一个video视频的盒子div高度是固定的,宽度如何按比例展示? 解决后效果如图: 红框标注的即是我在上面高度比例固定的范围 ...
- linux执行python命令后没有反应,不打印日志信息
实际的python执行的软连接是路径是/opt/python2.7/bin/python,而设置的软连接错误如下: 修改该连接,是python指向/opt/python2.7/bin/python, ...
- deep learning 以及deep learning 常用模型和方法
首先为什么会有Deep learning,我们得到一个结论就是Deep learning需要多层来获得更抽象的特征表达. 1.Deep learning与Neural Network 深度学习是机器学 ...
- 【Zookeeper系列】ZooKeeper伸缩性(转)
原文地址:https://www.cnblogs.com/sunddenly/p/4143306.html 一.ZooKeeper中Observer 1.1 ZooKeeper角色 经过前面的介绍,我 ...
- .NET开发人员遇到Maven
由.NET转向Java开发,总是会带着.NET平台的一些概念和工具想着在对应的Java平台是否也有着相同的解决方案.第一次用Maven随手打开pom.xml,看着里面许多属性描述我的感觉就是这是一个M ...
- asp.net mvc 路由检测工具
初学mvc,路由搞不清楚,可以通过一款插件 查看匹配的路由. 工具名<RouteDebugger> 可以在nuget中查询RouteDebugger后,安装.或者在控制台进行安装: pm& ...
- nodejs & npm & gulp 安装和配置
熟悉 Hellolily的过程中,了解了这个. 环境: ubuntu 14.04 LTS 64bit 源码安装方式: 下载最新源码:如果被和谐请自行想办法. 解压并编译安装: cd node-xxx ...
- 11.17 flask (1)
2018-11-17 18:38:42 开始学习进行玩前面项目 开始进军flask flask是一个小型的web框架,,但是有很多第三方组件 最后组装组装就和django一样啦!!!!!!! pyt ...
- python3读文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x9f in position 2: illegal multibyte sequence
- Python学习之旅(十七)
Python基础知识(16):面向对象编程(Ⅰ) 类和实例 类是抽象的模板 实例是根据类创建出来的一个个具体的对象,每个对象都拥有相同的方法,但各自的数据可能不同. 类可以在创建实例的时候,把一些我们 ...