文档章节

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

首席撸出血
 首席撸出血
发布于 2015/06/04 17:02
字数 407
阅读 210
收藏 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
对称加密算法DES、3DES原理和实现方式

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

zchuanzhao
2015/11/04
0
0
PHP中3DES加解密

@尐桀 你好,想跟你请教个问题: PHP中3DES加解密是否NOPadding的填充模式,对方用JAVA加解密的,16位加密后还是16位,可我用PHP写出来,就不对了,加密前是16位,加密后就不是了? 附: ci...

蓝色心海
2013/08/19
595
2

没有更多内容

加载失败,请刷新页面

加载更多

【Flutter教程】从零构建电商应用(一)

在这个系列中,我们将学习如何使用google的移动开发框架flutter创建一个电商应用。本文是flutter框架系列教程的第一部分,将学习如何安装Flutter开发环境并创建第一个Flutter应用,并学习Flu...

笔阁
16分钟前
5
0
什么是以太坊DAO?(三)

Decentralized Autonomous Organization,简称DAO,以太坊中重要的概念。一般翻译为去中心化的自治组织。 投票支付合约的所有费用和行动需要时间,并要求用户始终保持活跃,知情和专注。另一...

geek12345
18分钟前
2
0
一个本科学生对Linux的认知

一个本科学生对Linux的认知 我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要...

linuxCool
今天
3
0
CentOS 安装Tomcat

Tomcat 介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Java 程序写的网站用tomcat+jdk来运...

野雪球
今天
1
0
OSChina 周四乱弹 —— 每天都迟到是种什么样的体验

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @开源中国首席机器人 :《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 ...

小小编辑
今天
798
12

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部