高级加密标准(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加解密的更多相关文章

  1. .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 ...

  2. c# Aes加解密和对象序列化

    aes加解密 public class AesCryptto { private string key = "hjyf57468jhmuist"; private string i ...

  3. AES加解密算法Qt实现

    [声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...

  4. aes加解密前后端-后台

    一.web.xml: <filter> <filter-name>fastLoginFilter</filter-name> <filter-class> ...

  5. DES,AeS加解密,MD5,SHA加密

    1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...

  6. Java、C#双语版配套AES加解密示例

      这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...

  7. aes加解密 Illegal key size

    做aes加密时,发生一个奇怪的错误,在本地环境是好的,发布到测试环境就出问题, java.security.InvalidKeyException: Illegal key size 想到本地环境之前 ...

  8. C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密

    前言: RSA算法是利用公钥与密钥对数据进行加密验证的一种算法.一般是拿私钥对数据进行签名,公钥发给友商,将数据及签名一同发给友商,友商利用公钥对签名进行验证.也可以使用公钥对数据加密,然后用私钥对数 ...

  9. Aes加解密,php

    Aes类库 <?php namespace Aes; class Aes { /** * var string $method 加解密方法,可通过openssl_get_cipher_metho ...

随机推荐

  1. Android打开各种类型的文件方法总结

    很简单,通过调用系统的intent,我们可以打开各种文件,不熟悉的朋友可以了解下action.datatype.uri的相关知识. 通用方法如下: public static Intent openF ...

  2. laravel5.8笔记七:语言包

    语言包控制config/app.php 'locale' => 'en', 语言包位置:resources/lang/cn/ 建立resources/lang/cn/common.php < ...

  3. [转]解决Error: That port is already in use.

    ubuntu系统下,运行一个django项目,即输入python manage.py runserver后,可能出现 Error: That port is already in use.的错误. 即 ...

  4. 语法的二义性和token的超前扫描

    语法的二义性 JavaCC不能分析所有EBNF描述的语法,因为EBNF描述的语法本质上具有二义性的情况.C语言中if语句用JavaCC的EBNF可以是如下描述: "if" &quo ...

  5. VS2017 配置QT5

    QT安装 1. QT下载 2. 安装过程中,组件的选择(图自https://blog.csdn.net/gaojixu/article/details/82185694) 3. 安装完成 VS2017 ...

  6. jquery操作checkBox 一次取消选中后不能再选中

    $("input[type='checkbox']").each(function(){ $(this).attr("checked","checke ...

  7. chrome 调试进入 paused in debugger 状态解决办法

    今天调试代码的时候总是一刷新就进入 debugger 状态,总是需要按几次 F8 才能进到页面,我那个暴脾气啊,几次后终于是忍不住了,然后再网上找到了解决办法.就如一位网友所说,“Oh God! I ...

  8. 调用微信定位功能 lat _ lng php方法

    {:wx_jssdk_config("false")} //最主要的这一句 没有这一句在微信浏览器里是无法调用的定位功能的.下面有这个方法说明 <script> wx. ...

  9. Java编程基础篇第一章

    计算机语言 人与计算机交流的方式. 计算机语言有很多种如:C语言,c++,Java等 人机交互 软件的出现实现了人与计算机之间的更好的交流(交互) 交互方式 图形化界面:便于交互,容易操作,简单直观, ...

  10. cmd运行java程序---路径容易出错的问题

    初学者在首次使用cmd运行java程序时面临着很多的问题,重要的基本为“设置环境变量过程”与运行过程中的“路径出错问题”.由于环境变量设置的网络分享更多,且为大众情况,因此比较容易解决!   由于本人 ...