前言:
现在咱们对“java结合python项目”大概比较看重,姐妹们都需要分析一些“java结合python项目”的相关内容。那么小编在网络上收集了一些对于“java结合python项目””的相关文章,希望各位老铁们能喜欢,各位老铁们快快来学习一下吧!前情
需要使用Python和Java实现同一个AES加解密算法,使Python版本加密的密文能够由Java代码解密,反之亦然。
Python实现
Python为3.6版本
# -*- coding: utf-8 -*-import base64from Crypto.Cipher import AESfrom urllib import parseAES_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)
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(); } }}
再将Java代码加密出来的密钥放到Python中进行解密
大功告成,实现了AES在Java和Python的互转。
我是「翎野君」,感谢各位朋友的:点赞、收藏和评论,我们下期见。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #java结合python项目 #java和python对接 #pythoncipher #python aes 加密文件