终于有机会生产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编码一致的更多相关文章

  1. PHP AES的加密解密

    AES加密算法 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...

  2. PHP AES的加密解密-----【弃用】

    mcrypt_decrypt在PHP7.*已经被弃用,取而代之的是openssl_decrypt/encrypt,请参考: PHP7.* AES的加密解密 AES加密算法 密码学中的高级加密标准(Ad ...

  3. AES对称加密解密类

    import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...

  4. Golang之AES/DES加密解密

    AES/DES加密/解密涉及4个概念:1. Block, 也叫分组, 相应加密/解密的算法. 2. BlockMode, 模式, 相应加密/解密的处理.3. InitalVectory, 初始向量4. ...

  5. 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  6. AES在线加密解密-附AES128,192,256,CBC,CFB,ECB,OFB,PCBC各种加密解密源码

    一.AES在线加密解密:AES 128/192/256位CBC/CFB/ECB/OFB/PCBC在线加密解密|在线工具|在线助手|在线生成|在线制作 http://www.it399.com/aes ...

  7. PHP7.* AES的加密解密

    之前写过一篇: PHP AES的加密解密-----[弃用] 使用的是php5.*之前的mcrypt_decrypt 函数,该函数已经在php7.1后弃用了,上马的是openssl的openssl_en ...

  8. PHP 服务端 和 APP 客户端 实现 RSA+AES 双向加密解密

    目的:服务端和移动端双向加密解密 共有七个文件 其中包括三个类文件 lib_aes.php aes对称加密解密类 server_rsa_crypt.php 服务端RSA公钥私钥非对称加密解密类 cli ...

  9. .net Xml加密解密操作

    生成密钥的方法: /// <summary>生成RSA加密 解密的 密钥 /// 生成的key就是 方法EncryptByRSA与DecryptByRSA用的key了 /// </s ...

随机推荐

  1. Qt5 托盘模仿qq闪烁,弹消息框实现

    在别人代码基础上做的,课设刚好用上了,贴出来分享Qt5.5.1实现. 图片自己找. #ifndef DIALOG_H #define DIALOG_H #include <QDialog> ...

  2. 浏览器JS脚本

    javascript: void((function() { alert("zeze"); })()) javascript:

  3. .pyc文件是什么?

    一个.py文件就是一个模块,而模块名就是文件名,如module.py的模块名就是module.如果module.py文件里定义了一些函数和变量,而外部文件如test_module.py想使用这些函数或 ...

  4. PHP网页缓存技术

    http://blog.sina.com.cn/s/blog_646e51c40100weu9.html 前台静态化:把动态页面解析后保存为静态页面 文件缓存:把查询结果保存为文件,XML 内存缓存: ...

  5. java面试宝典(蓝桥学院)

    Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...

  6. http statusCode(状态码)

    转自:1) http://specs.openstack.org/openstack/keystone-specs/api/v3/identity-api-v3.html#unauthorized   ...

  7. 数据库Error:The ScriptCollection in ScriptName not find

    System.InvalidOperationException: The ScriptCollection in ScriptName not find 在 WMI.SQL.HELPER.CONFI ...

  8. float 在内存中如何存储的

    float类型数字在计算机中用4个字节存储.遵循IEEE-754格式标准:    一个浮点数有2部分组成:底数m和指数e 底数部分 使用二进制数来表示此浮点数的实际值指数部分 占用8bit的二进制数, ...

  9. Linux下安装gcc和g++

    以CentOS为例,安装后是没有C语言和C++编译环境的,需要手动安装,最简单的是用yum的方式安装,过程如下: 1.安装gcc yum install gcc 询问是否,按y键回车即可,或者 yum ...

  10. MySQL排序原理与MySQL5.6案例分析【转】

    本文来自:http://www.cnblogs.com/cchust/p/5304594.html,其中对于自己觉得是重点的加了标记,方便自己查阅.更多详细的说明可以看沃趣科技的文章说明. 前言    ...