文档章节

JAVA AES加解密CBC模式PCKS5padding的实现

首席撸出血
 首席撸出血
发布于 2015/06/04 17:02
字数 407
阅读 159
收藏 0


import java.text.SimpleDateFormat;
import java.util.Date;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * 项目中要求访问某个页面的时候要有权限控制,由于是从一个系统跳到另一个系统 所以其中的一部分功能就是使用动态的URL链接 由于我自己负责,所以我的实现打算是这样的
 * 使用AES加密采用CBC加密模式PKCS5PADDING填充方式,动态的URL的参数使用当前时间 IV向量采用当前时间的年月日,最近采用BASE64加密一下 这里只是提前写一下实现方案
 */

public class AesEncrypt {
    static Cipher cipher;

    static final String KEY_ALGORITHM = "AES";

    static final String CIPHER_ALGORITHM_CBC = "AES/CBC/PKCS5Padding";

    static SecretKey secretKey;
    
    static String key;

    public static void main(String[] args) throws Exception {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String date2String = sdf.format(date) + "00";
        System.out.println(date2String);
        String iv = date2String.substring(0, 8) + date2String.substring(0, 8);
        key = iv;
        String ans = encrypt(date2String, iv);
        descrypt(ans, iv);
    }

    /**
     * 使用AES 算法 加密,默认模式 AES/CBC/PKCS5Padding
     */
    public static String encrypt(String str, String iv) throws Exception {
        cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC);
        // KeyGenerator 生成aes算法密钥
        secretKey = new SecretKeySpec(key.getBytes(), KEY_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv.getBytes("utf-8")));// 使用加密模式初始化 密钥
        byte[] encrypt = cipher.doFinal(str.getBytes("utf-8")); // 按单部分操作加密或解密数据,或者结束一个多部分操作。
        String ans = new BASE64Encoder().encode(encrypt);
        System.out.println(ans);
        return ans;
    }

    /**
     * 使用AES 算法 解密,默认模式 AES/CBC/PKCS5Padding
     */
    static void descrypt(String str, String iv) throws Exception {
        byte[] encrypt = new BASE64Decoder().decodeBuffer(str);
        secretKey = new SecretKeySpec(key.getBytes(), KEY_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv.getBytes("utf-8")));// 使用解密模式初始化 密钥
        byte[] decrypt = cipher.doFinal(encrypt);
        System.out.println(new String(decrypt));
    }
}


© 著作权归作者所有

共有 人打赏支持
首席撸出血

首席撸出血

粉丝 54
博文 17
码字总数 3844
作品 0
浦东
程序员
Node系统模块crypto实现md5 Cipher等多种加密方式

crypto加密模块是C/C++实现这些算法后,暴露为javascript接口的模块,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。Cipher Cipher类用于加密数据,属于对称密...

曲先森
07/31
0
0
AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】

由于本人小菜,开始对AES加密并不了解,在网络上花了比较多时间查阅资料整理; 先简单从百度找来介绍: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称高级加密标准Rij...

尐桀
2012/10/31
0
29
AES加密CBC模式 IOS - Java 互通共用

AES加密模式和填充方式 算法/模式/填充 16字节加密后数据长度 不满16字节加密后长度 AES/CBC/NoPadding 16 不支持 AES/CBC/PKCS5Padding 32 16 AES/CBC/ISO10126Padding 32 16 AES/CFB/NoPad...

岸芷汀兰
2014/12/01
0
2
Android外部文件加解密及应用实践

有这样的应用场景,当我们把一些重要文件放到asset文件夹中时,把.apk解压是可以直接拿到这个文件的,一些涉及到重要信息的文件我们并不想被反编译拿去,这个时候需要先对文件进行加密,然后...

C6C
05/08
0
0
对称加密算法DES、3DES原理和实现方式

1、对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成复杂的...

zchuanzhao
2015/11/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

xtof
今天
1
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
今天
6
0
在Ubuntu安装和配置Sphinx

Ubuntu系统默认是配置有sphinx的,先检查一下,别多此一举。。。。。 在开始本指南之前,您需要: 一个Ubuntu 16.04服务器。 sudo的一个非root用户,您可以通过以下设置本教程 。 安装在服务...

阿锋zxf
今天
1
0
Qt编写输入法V2018超级终结版

对于qt嵌入式linux开发人员来说,输入法一直是个鸡肋问题,要么不支持实体键盘同步,要么不能汉字输入,要么不支持网页输入等,这几年通过陆续接触大量的各种输入法应用场景客户,得到真实需...

飞扬青云
今天
2
0
TypeScript基础入门之高级类型的多态的 this类型

转发 TypeScript基础入门之高级类型的多态的 this类型 高级类型 多态的this类型 多态的this类型表示的是某个包含类或接口的子类型。 这被称做F-bounded多态性。 它能很容易的表现连贯接口间的...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部