JAVA和PYTHON同时实现AES的加密解密操作---且生成的BASE62编码一致
终于有机会生产JAVA的东东了。
有点兴奋。
花了一天搞完。。
java(关键key及算法有缩减):
package com.security; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * 实现AES加密解密 * cg882 * 2016-11-16 */ public class AESencrp { // 加密算法 private String ALGO = "AES"; private String ALGO_MODE = "AES/CBC/NoPadding"; private String akey = "16bit"; private String aiv = "16bit"; /** * 用来进行加密的操作 * * @param Data * @return * @throws Exception */ public String encrypt(String Data) throws Exception { try { Cipher cipher = Cipher.getInstance(ALGO_MODE); int blockSize = cipher.getBlockSize(); byte[] dataBytes = Data.getBytes(); int plaintextLength = dataBytes.length; if (plaintextLength % blockSize != 0) { plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize)); } byte[] plaintext = new byte[plaintextLength]; System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length); SecretKeySpec keyspec = new SecretKeySpec(akey.getBytes("utf-8"), ALGO); IvParameterSpec ivspec = new IvParameterSpec(aiv.getBytes("utf-8")); cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); byte[] encrypted = cipher.doFinal(plaintext); String EncStr = new sun.misc.BASE64Encoder().encode(encrypted); return EncStr ; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 用来进行解密的操作 * * @param encryptedData * @return * @throws Exception */ public String decrypt(String encryptedData) throws Exception { try { byte[] encrypted1 = new sun.misc.BASE64Decoder().decodeBuffer(encryptedData); Cipher cipher = Cipher.getInstance(ALGO_MODE); SecretKeySpec keyspec = new SecretKeySpec(akey.getBytes("utf-8"), ALGO); IvParameterSpec ivspec = new IvParameterSpec(aiv.getBytes("utf-8")); cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); byte[] original = cipher.doFinal(encrypted1); String originalString = new String(original); return originalString; } catch (Exception e) { e.printStackTrace(); return null; } } }
测试JAVA的代码:
package com.security; /** * 实现AES加密 * cg882 * 2016-11-16 */ public class Checker { public static void main(String[] args) throws Exception { // 创建加解密 AESencrp aes = new AESencrp(); // 要进行加密的密码 String password = "password^*(&( 09-8ADF"; // 进行加密后的字符串 String passwordEnc = aes.encrypt(password); String passwordDec = aes.decrypt(passwordEnc); System.out.println("原来的密码 : " + password); System.out.println("加密后的密码 : " + passwordEnc); System.out.println("解密后的原密码 : " + passwordDec); } }
python就简单多罗。。。。
#!/usr/bin/env python # -*- coding: utf-8 -*- from Crypto.Cipher import AES import base64 import os BLOCK_SIZE = 16 PADDING = '\0' pad_it = lambda s: s+(16 - len(s)%16)*PADDING key = '16bit' iv = '16bit' #使用aes算法,进行加密解密操作 #为跟java实现同样的编码,注意PADDING符号自定义 def encrypt_aes(sourceStr): generator = AES.new(key, AES.MODE_CBC, iv) crypt = generator.encrypt(pad_it(sourceStr)) cryptedStr = base64.b64encode(crypt) return cryptedStr def decrypt_aes(cryptedStr): generator = AES.new(key, AES.MODE_CBC, iv) cryptedStr = base64.b64decode(cryptedStr) recovery = generator.decrypt(cryptedStr) decryptedStr = recovery.rstrip(PADDING) return decryptedStr sourceStr = 'password^*(&( 09-8ADF' print encrypt_aes(sourceStr) print decrypt_aes(encrypt_aes(sourceStr))
结果图:
有几个小技巧跟进解决一下:
1,如果安装PYTHON扩展库时,需要C库进行编译,而自己又没安装权限或是BAT文件不对时,
直接从网上找预编译好的WHL文件,或者可以解决问题。
2,JAVA代码手工编译源码,执行程序,生成jar的例子如下(注意按包结构建好目录,执行命令时,在包顶层目录执行相关命令)
A编译java源代码
javac -cp com/security com/security/*.java
B执行main文件,并指定包路径
java -cp . com/security/Checker
C指定class生成jar包
jar cvf AESencrp.jar com/security/AESencrp.class
JAVA和PYTHON同时实现AES的加密解密操作---且生成的BASE62编码一致的更多相关文章
- PHP AES的加密解密
AES加密算法 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...
- PHP AES的加密解密-----【弃用】
mcrypt_decrypt在PHP7.*已经被弃用,取而代之的是openssl_decrypt/encrypt,请参考: PHP7.* AES的加密解密 AES加密算法 密码学中的高级加密标准(Ad ...
- AES对称加密解密类
import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...
- Golang之AES/DES加密解密
AES/DES加密/解密涉及4个概念:1. Block, 也叫分组, 相应加密/解密的算法. 2. BlockMode, 模式, 相应加密/解密的处理.3. InitalVectory, 初始向量4. ...
- 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- AES在线加密解密-附AES128,192,256,CBC,CFB,ECB,OFB,PCBC各种加密解密源码
一.AES在线加密解密:AES 128/192/256位CBC/CFB/ECB/OFB/PCBC在线加密解密|在线工具|在线助手|在线生成|在线制作 http://www.it399.com/aes ...
- PHP7.* AES的加密解密
之前写过一篇: PHP AES的加密解密-----[弃用] 使用的是php5.*之前的mcrypt_decrypt 函数,该函数已经在php7.1后弃用了,上马的是openssl的openssl_en ...
- PHP 服务端 和 APP 客户端 实现 RSA+AES 双向加密解密
目的:服务端和移动端双向加密解密 共有七个文件 其中包括三个类文件 lib_aes.php aes对称加密解密类 server_rsa_crypt.php 服务端RSA公钥私钥非对称加密解密类 cli ...
- .net Xml加密解密操作
生成密钥的方法: /// <summary>生成RSA加密 解密的 密钥 /// 生成的key就是 方法EncryptByRSA与DecryptByRSA用的key了 /// </s ...
随机推荐
- linux操作系统flash player问题--ubuntu
adobe公司停止了对linux系统的flash player的更新,这导致很多网页视频不能够通过浏览器观看,很是不爽! 还好,给用户留下了一点点希望,那便是chrome浏览器. 谷歌浏览器,有一款插 ...
- Dom终
l创建DOM元素 •createElement(标签名) 创建一个节点 •appendChild(节点) 追加一个节点 –例子:为ul插入li <!DOCTYPE html PUBLIC & ...
- 如何优雅的使用 phpStorm 开发工具
按照惯例依然是从百科上复制一条简介: PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具.PhpStorm可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化d ...
- 使用Java中File类批量创建文件和批量修改文件名
批量创建文件 int cont = 1; String s = "E:\\学习资料\\Java笔记-"; while(cont<100){ File f = new File ...
- FFmpeg for XP(x86) 2016-03-23 static 静态编译程序
FFmpeg for XP(x86) 2016-03-23 static 静态编译适用于32位XP系统,能加的扩展都加了,结果文件大小非常大. 最新版加了不少视频和音频滤镜. ffmpeg.20160 ...
- 带中文的路径导致NSURL初始化一直为null的问题
一.问题描述 在学习Ojective-C过程中,需要读取文件中的内容,但发现指针变量url的值一直为nil. 代码如下: NSString *strUrl=@"file:///Users/f ...
- python2.x和3.x的区别
这个星期开始学习Python了,因为看的书都是基于 Python2.x,而且我安装的是Python3.1,所以书上写的地方好多都不适用于Python3.1,特意在Google上search了一下 3. ...
- DB2 SQLCODE 大全
DB2错误信息sqlcode sqlstate 说明 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 ...
- sql server 行转列(转载)
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- 【Git】自定义Git
来源:廖雪峰 让Git显示颜色 git config --global color.ui true 忽略特殊文件 有些文件有敏感信息,或者是自动生成的中间文件.不能或不必提交到git,可以用.giti ...