最新版-Python和Java实现Aes相互加解密

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了最新版-Python和Java实现Aes相互加解密脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前情

需要使用Python和Java实现同一个AES加解密算法,使Python版本加密的密文能够由Java代码解密,反之亦然。

Python实现

Python为3.6版本

# -*- coding: utf-8 -*- import base64 From Crypto.Cipher import AES from urllib import parse   AES_SECRET_KEY = 'lingyejunAestest' #此处16|24|32个字符 IV = "1234567890123456"   # padding算法 BS = len(AES_SECRET_KEY) pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) unpad = lambda s: s[0:-ord(s[-1:])]     class AES_ENCRYPT(object):     def __inIT__(self):         self.key = AES_SECRET_KEY         self.mode = AES.MODE_CBC       #加密函数     def encrypt(self, text):         cryptor = AES.new(self.key.encode("utf8"), self.mode, IV.encode("utf8"))         self.ciphertext = cryptor.encrypt(bytes(pad(text), encoding="utf8"))         #AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题,使用base64编码         return base64.b64encode(self.ciphertext)       #解密函数     def decrypt(self, text):         decode = base64.b64decode(text)         cryptor = AES.new(self.key.encode("utf8"), self.mode, IV.encode("utf8"))         plain_text = cryptor.decrypt(decode)         return unpad(plain_text)   if __name__ == '__main__':     aes_encrypt = AES_ENCRYPT()     my_email = "lingyejun@python.aes"     e = aes_encrypt.encrypt(my_email)     d = aes_encrypt.decrypt(e)     PRint(my_email)     print(e)     print(d)

@H_652_126@

最新版-Python和Java实现Aes相互加解密

Java实现

import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;   import javax.crypto.Cipher; import javax.crypto.sPEc.IvParameterSpec; import javax.crypto.spec.SecretKeySpec;   public class AesTest {       /**      * 加密用的Key 可以用26个字母和数字组成      * 此处使用AES-128-CBC加密模式,key需要为16位。      */     private static String sKey = "lingyejunAesTest";     private static String ivParameter = "1234567890123456";       // 加密     public static String encrypt(String sSrc) throws Exception {         Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");         byte[] raw = sKey.getBytes();         SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");         IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度         cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);         byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));         return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码     }       // 解密     public static String decrypt(String sSrc) {         try {             byte[] raw = sKey.getBytes("ASCII");             SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");             Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");             IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());             cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);             byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密             byte[] original = cipher.doFinal(encrypted1);             String originalString = new String(original, "utf-8");             return originalString;         } catch (Exception ex) {             return null;         }     }       public static void main(String[] args) {         String email = "lingyejun@java.aes";         try {             String sec = encrypt(email);             System.out.println(sec);             System.out.println(decrypt("CcOtM9WXv0N+Owh/xxedZJnuNUaTU7y3aUBESQLUvVM="));         } catch (Exception e) {             e.printStackTrace();         }     } }

最新版-Python和Java实现Aes相互加解密

再将Java代码加密出来的密钥放到Python中进行解密

最新版-Python和Java实现Aes相互加解密

大功告成,实现了AES在Java和Python的互转。

脚本宝典总结

以上是脚本宝典为你收集整理的最新版-Python和Java实现Aes相互加解密全部内容,希望文章能够帮你解决最新版-Python和Java实现Aes相互加解密所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。