摘要:前情需要使用和實現(xiàn)同一個加解密算法,使版本加密的密文能夠由代碼解密,反之亦然。加密使用模式,需要一個向量,可增加加密算法的強度此處使用做轉(zhuǎn)碼。解密先用解密再將代碼加密出來的密鑰放到中進(jìn)行解密大功告成,實現(xiàn)了在和的互轉(zhuǎn)。
前情
需要使用Python和Java實現(xiàn)同一個AES加解密算法,使Python版本加密的密文能夠由Java代碼解密,反之亦然。
Python實現(xiàn)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 #加密函數(shù) 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) #解密函數(shù) 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 = "[email protected]" e = aes_encrypt.encrypt(my_email) d = aes_encrypt.decrypt(e) print(my_email) print(e) print(d)Java實現(xiàn)
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個字母和數(shù)字組成 * 此處使用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做轉(zhuǎn)碼。 } // 解密 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 = "[email protected]"; try { String sec = encrypt(email); System.out.println(sec); System.out.println(decrypt("CcOtM9WXv0N+Owh/xxedZJnuNUaTU7y3aUBESQLUvVM=")); } catch (Exception e) { e.printStackTrace(); } } }
再將Java代碼加密出來的密鑰放到Python中進(jìn)行解密
大功告成,實現(xiàn)了AES在Java和Python的互轉(zhuǎn)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43931.html
摘要:前情需要使用和實現(xiàn)同一個加解密算法,使版本加密的密文能夠由代碼解密,反之亦然。加密使用模式,需要一個向量,可增加加密算法的強度此處使用做轉(zhuǎn)碼。解密先用解密再將代碼加密出來的密鑰放到中進(jìn)行解密大功告成,實現(xiàn)了在和的互轉(zhuǎn)。 前情 需要使用Python和Java實現(xiàn)同一個AES加解密算法,使Python版本加密的密文能夠由Java代碼解密,反之亦然。 Python實現(xiàn) Python為3.6版...
摘要:加密是一種可逆加密算法,對用戶的敏感信息加密處理。加密錯誤返回獲取加密密文字節(jié)數(shù)組對密文字節(jié)數(shù)組進(jìn)行轉(zhuǎn)換為輸出密文返回輸出密文加密錯誤返回解密密文,帶解密的內(nèi)容密碼,解密的密碼返回明文,解密后得到的內(nèi)容。 AES加密 AES 是一種可逆加密算法,對用戶的敏感信息加密處理。 本文暫不深入AES原理,僅關(guān)注JAVA代碼實現(xiàn)AES加解密。 JAVA代碼實現(xiàn) 在用JAVA實現(xiàn)AES加密前,先瀏...
摘要:首先安裝確認(rèn)安裝的是版本版本的是不一樣的文件頭部的聲明為我們可以生成一個隨機的密鑰注意要使用密碼學(xué)安全的隨機方法這里生成的是而不是為了可讀性采用加密內(nèi)容加密前需要到的整數(shù)倍長度才可有對應(yīng)方法初始向量為長度返回初始向量加密數(shù)據(jù)解密方法為 首先 安裝cryptography sudo pip3 install cryptography 確認(rèn)安裝的是2.1.x版本 (1.x版本的api是不一...
時間:2017年4月11日星期二說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個人學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:對稱加密算法DES 1-1 JAVA對稱加密算法DES 加密密鑰=解密密鑰 對稱加密算法 初等 DES --3D...
閱讀 3817·2021-08-30 09:47
閱讀 3778·2019-08-30 15:56
閱讀 702·2019-08-30 14:18
閱讀 723·2019-08-29 16:17
閱讀 2089·2019-08-29 11:07
閱讀 665·2019-08-26 13:53
閱讀 3476·2019-08-26 10:26
閱讀 2519·2019-08-23 18:30