国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

最新版-Python和Java實現Aes相互加解密

孫淑建 / 3419人閱讀

摘要:前情需要使用和實現同一個加解密算法,使版本加密的密文能夠由代碼解密,反之亦然。加密使用模式,需要一個向量,可增加加密算法的強度此處使用做轉碼。解密先用解密再將代碼加密出來的密鑰放到中進行解密大功告成,實現了在和的互轉。

前情

需要使用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)

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的互轉。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74802.html

相關文章

  • 新版-PythonJava實現Aes相互解密

    摘要:前情需要使用和實現同一個加解密算法,使版本加密的密文能夠由代碼解密,反之亦然。加密使用模式,需要一個向量,可增加加密算法的強度此處使用做轉碼。解密先用解密再將代碼加密出來的密鑰放到中進行解密大功告成,實現了在和的互轉。 前情 需要使用Python和Java實現同一個AES加解密算法,使Python版本加密的密文能夠由Java代碼解密,反之亦然。 Python實現 Python為3.6版...

    fox_soyoung 評論0 收藏0
  • JAVAAES密 簡單實現 AES-128/ECB/PKCS5Padding

    摘要:加密是一種可逆加密算法,對用戶的敏感信息加密處理。加密錯誤返回獲取加密密文字節數組對密文字節數組進行轉換為輸出密文返回輸出密文加密錯誤返回解密密文,帶解密的內容密碼,解密的密碼返回明文,解密后得到的內容。 AES加密 AES 是一種可逆加密算法,對用戶的敏感信息加密處理。 本文暫不深入AES原理,僅關注JAVA代碼實現AES加解密。 JAVA代碼實現 在用JAVA實現AES加密前,先瀏...

    sourcenode 評論0 收藏0
  • python(3.x) 實現AES 解密

    摘要:首先安裝確認安裝的是版本版本的是不一樣的文件頭部的聲明為我們可以生成一個隨機的密鑰注意要使用密碼學安全的隨機方法這里生成的是而不是為了可讀性采用加密內容加密前需要到的整數倍長度才可有對應方法初始向量為長度返回初始向量加密數據解密方法為 首先 安裝cryptography sudo pip3 install cryptography 確認安裝的是2.1.x版本 (1.x版本的api是不一...

    harryhappy 評論0 收藏0
  • java解密實例

    摘要:序本文主要小結一下里頭的以及加解密。屬于塊加密,塊加密中有等幾種工作模式。與一樣在加密前需要對數據進行填充,不是很適合對流數據進行加密。 序 本文主要小結一下java里頭的AES以及RSA加解密。 AES showImg(https://segmentfault.com/img/remote/1460000011156406);使用AES加密時需要幾個參數: 密鑰長度(Key Size...

    mengera88 評論0 收藏0
  • 慕課網_《Java實現對稱密》學習總結

    時間:2017年4月11日星期二說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:對稱加密算法DES 1-1 JAVA對稱加密算法DES 加密密鑰=解密密鑰 對稱加密算法 初等 DES --3D...

    tomlingtm 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<