當前位置:首頁 » 編程語言 » python加密解密

python加密解密

發布時間: 2023-06-04 22:21:53

『壹』 python 利用Crypto進行ECB 加密

windows下使用AES時安裝pycryptodome 模塊,pip install pycryptodome

linux 下使用AES時安裝pycrypto模塊,pip install pycrypto

```

from Crypto.Cipherimport AES

from binasciiimport b2a_hex, a2b_hex

from Cryptoimport Random

import base64

import json

class AesEncry(object):

        # aes秘鑰 ,可根據自身需要手動生成

     宴旁   key ="aes_keysaes_keysaes_keys"  

        def encrypt(self, data):

                data = json.mps(data)

                mode = AES.MODE_ECB

                padding =lambda s: s + (16 -len(s) %16) *chr(16 -len(s) %16)

                cryptos = AES.new(self.key.encode("utf-8"), mode)

                cipher_text = cryptos.encrypt(padding(data).encode("utf-8"))

                return base64.b64encode(cipher_text).decode("utf-8")

        def decrypt(self, data):

                cryptos = AES.new(self.key.encode("型祥握utf-8"), AES.MODE_ECB)

                decrpytBytes = base64.b64decode(data)

         卜慶       meg = cryptos.decrypt(decrpytBytes).decode('utf-8')

                return meg[:-ord(meg[-1])]

aes_encry_util = AesEncry()

#明文

data ="mypwd_test"

#加密

encry_data = aes_encry_util.encrypt(data)

print(encry_data)

# 對密文進行解密

decry_data = aes_encry_util.decrypt(encry_data)

print(decry_data)

```

如上便完成了利用python進行AES的ECB加密

『貳』 python3.6 AES 加密解密

本來以為這是個比較簡單的東襪野西者梁,網上一搜一大把。搜索結告嫌喊果氣的我自己看文檔寫了一個。
首先安裝pycryptodome或者pycryptodomex 用pip 安裝,安裝之後需要修改包名crypto改為Crypto

我是採用ECB模式加密你也可以用其他模式加密,模式區別可以看這篇 https://www.cnblogs.com/liangxuehui/p/4651351.html 。
秘鑰加密解密需要統一。

『叄』 如何使用Python進行Rijndael方式的加密解密

Rijndael,在高級加密標准(AES)中使用的基本密碼演算法
概述 (美國)國家標准技術研究所(NIST)選擇Rijndael作為美國政府加密標准(AES)的加密演算法,AES取代早期的數據加密標准(DES)。Rijndael由比利時計算機科學家Vincent Rijmen和Joan Daemen開發,它可以使用128位,192位或者256位的密鑰長度,使得它比56位的DES更健壯可靠。Rijndael也有一個非常小的版本(52位),合適用在蜂窩電話、個人數字處理器(PDA)和其他的小設備上。
近似讀音:Rijn [rain] dael [del] (萊恩戴爾) Rijn 來源 Rhine [萊茵河]的荷蘭語(Dutch)發音。
dael 是常用的人名 這詞是兩個科學家的名字各出一段拼成的。
Rijndael.h
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma once
#include <exception>
#include <string.h>
using namespace std;
class CRijndael
{
public:
enum { ECB=0, CBC=1, CFB=2 };
private:
enum { DEFAULT_BLOCK_SIZE=16 };
enum { MAX_BLOCK_SIZE=32, MAX_ROUNDS=14, MAX_KC=8, MAX_BC=8 };

static int Mul(int a, int b)
{
return (a != 0 && b != 0) ? sm_alog[(sm_log[a & 0xFF] + sm_log[b & 0xFF]) % 255] : 0;
}
static int Mul4(int a, char b[])
{
if(a == 0)
return 0;
a = sm_log[a & 0xFF];
int a0 = (b[0] != 0) ? sm_alog[(a + sm_log[b[0] & 0xFF]) % 255] & 0xFF : 0;
int a1 = (b[1] != 0) ? sm_alog[(a + sm_log[b[1] & 0xFF]) % 255] & 0xFF : 0;
int a2 = (b[2] != 0) ? sm_alog[(a + sm_log[b[2] & 0xFF]) % 255] & 0xFF : 0;
int a3 = (b[3] != 0) ? sm_alog[(a + sm_log[b[3] & 0xFF]) % 255] & 0xFF : 0;
return a0 << 24 | a1 << 16 | a2 << 8 | a3;
}
public:
CRijndael();
virtual ~CRijndael();

void MakeKey(char const* key, char const* chain,
int keylength=DEFAULT_BLOCK_SIZE, int blockSize=DEFAULT_BLOCK_SIZE);
private:
void Xor(char* buff, char const* chain)
{
if(false==m_bKeyInit)
throw exception(sm_szErrorMsg1);
for(int i=0; i<m_blockSize; i++)
*(buff++) ^= *(chain++);
}
void DefEncryptBlock(char const* in, char* result);
void DefDecryptBlock(char const* in, char* result);
public:

void EncryptBlock(char const* in, char* result);
void DecryptBlock(char const* in, char* result);
void Encrypt(char const* in, char* result, size_t n, int iMode=ECB);

void Decrypt(char const* in, char* result, size_t n, int iMode=ECB);
int GetKeyLength()
{
if(false==m_bKeyInit)
throw exception(sm_szErrorMsg1);
return m_keylength;
}
int GetBlockSize()
{
if(false==m_bKeyInit)
throw exception(sm_szErrorMsg1);
return m_blockSize;
}
int GetRounds()
{
if(false==m_bKeyInit)
throw exception(sm_szErrorMsg1);
return m_iROUNDS;
}
void ResetChain()
{
memcpy(m_chain, m_chain0, m_blockSize);
}
public:
static char const* sm_chain0;
private:
static const int sm_alog[256];
static const int sm_log[256];
static const char sm_S[256];
static const char sm_Si[256];
static const int sm_T1[256];
static const int sm_T2[256];
static const int sm_T3[256];
static const int sm_T4[256];
static const int sm_T5[256];
static const int sm_T6[256];
static const int sm_T7[256];
static const int sm_T8[256];
static const int sm_U1[256];
static const int sm_U2[256];
static const int sm_U3[256];
static const int sm_U4[256];
static const char sm_rcon[30];
static const int sm_shifts[3][4][2];
static char const* sm_szErrorMsg1;
static char const* sm_szErrorMsg2;
bool m_bKeyInit;
int m_Ke[MAX_ROUNDS+1][MAX_BC];
int m_Kd[MAX_ROUNDS+1][MAX_BC];
int m_keylength;
int m_blockSize;
int m_iROUNDS;
char m_chain0[MAX_BLOCK_SIZE];
char m_chain[MAX_BLOCK_SIZE];
int tk[MAX_KC];
int a[MAX_BC];
int t[MAX_BC];
};

『肆』 利用以下python代碼編寫欄柵加密和解密

修改後運行結果:

a. 加密

1.進行柵欄加密
2.進行柵欄解密
請選擇: 1
請輸入分組數目 2
請輸入列排編號 21
請輸明文 abcdefgh
b a

d c

f e

h g

b. 解密

1.進行柵欄加密
2.進行柵欄解密
請選擇: 2
請輸入分組數目 2
請輸入列排編號 21
請輸密文 b a d c f e h g
abcdefgh

修改後的代碼:
def Encrypt(n,col,M):
row=len(M)/n
if len(M)%n>0:
row+=1
arr=[[""for x in range(0,n)] for y in range(0,row)]
x=0
for i in range(0,row):
for j in range(0,n):
if x<len(M):
arr[i][j]=M[x]
#print M[x],
x+=1
#print "\r\n"

for i in range(0,row):
for j in range(0,n):
m=int(col[j])-1
print arr[i][m],
print "\r\n"

def Decrypt(n, col, C):
C="".join(C.split())
row=len(C)/n
if len(C)%n>0:
row+=1
arr=[[""for x in range(0,n)] for y in range(0,row)]
x=0
for i in range(0,row):
for j in range(0,n):
if x<len(C):
arr[i][j]=C[x]
#print C[x],
x+=1
#print "\r\n"

M=""
for i in range(0,row):
for j in range(0,n):
m=int(col[j])-1
#print arr[i][m],
M+=arr[i][m]
#print "\r\n"
print M

print u"1.進行柵欄加密\r\n2.進行柵欄解密\r\n請選擇:".encode("gb2312"),

sel=raw_input()

if int(sel)==1:
print u"請輸入分組數目".encode("gb2312"),
n=int(raw_input())
print u"請輸入列排編號".encode("gb2312"),
col=raw_input()
print u"請輸明文".encode("gb2312"),
M=raw_input()
while len(M)<n*3:
print u"明文必須是分組數目的3倍".encode("gb2312")
M=raw_input()
Encrypt(n,col,M)

else :
print u"請輸入分組數目".encode("gb2312"),
n=int(raw_input())
print u"請輸入列排編號".encode("gb2312"),
col=raw_input()
print u"請輸密文".encode("gb2312"),
C=raw_input()
while len(C)<n*3:
print u"密文必須是分組數目的3倍".encode("gb2312")
C=raw_input()
Decrypt(n,col,C)

『伍』 python 寫異或加密

from random import seed,randint

str_in=input('請輸入一個字元串:')
you_seed=input('請輸入密碼:')
you_seed=int(you_seed)

#lock
def my_lock(lock_str,lock_seed):
seed(lock_seed)
li_out=[]
for i in lock_str:
li_out.append(chr(ord(i)^randint(0,65535)))
return ''.join(li_out)
my_lock_str=my_lock(str_in,you_seed)
print('原字元串:',str_in)
print('加密字元串:',my_lock_str)
print('還原後字元串:',my_lock(my_lock_str,you_seed))
input()
#python 3.4

『陸』 Python編程實現加密解密讀取文件

對Python加密時可能會有兩種形式,一種是對Python轉成的exe進行保護,另一種是直接對.py或者.pyc文件進行保護,下面將列舉兩種形式的保護流程。

1、對python轉exe加殼

下載最新版VirboxProtector加殼工具,使用加殼工具直接對demo.exe進行加殼操作

2、對.py/.pyc加密

第一步,使用加殼工具對python安裝目錄下的python.exe進行加殼,將python.exe拖入到加殼工具VirboxProtector中,配置後直接點擊加殼。

第二步,對.py/.pyc進行加密,使用DSProtector對.py/.pyc進行保護。

安全技術:

l虛擬機外殼:精銳5的外殼保護工具,創新性的引入了預分析和自動優化引擎,有效的解決了虛擬化保護代碼時的安全性和性能平衡問題。

l碎片代碼執行:利用自身成熟的外殼中的代碼提取技術,抽取大量、大段代碼,加密混淆後在安全環境中執行,最大程度上減少加密鎖底層技術和功能的依賴,同時大量大段地移植又保證了更高的安全性。

lVirbox加密編譯引擎:集編譯、混淆等安全功能於一身,由於在編譯階段介入,可優化空間是普遍虛擬化技術無法比擬的,對代碼、變數的混淆程度也有了根本的提升。

l反黑引擎:內置R0級核心態反黑引擎,基於黑客行為特徵 的(反黑資料庫)反制手段。精準打擊調試、注入、內存修改等黑客行為,由被動挨打到主動防護。

加密效果:

加密之前

以pyinstall 的打包方式為例,使用pyinstxtractor.py文件對log_322.exe進行反編譯,執行後會生成log_322.exe_extracted文件夾,文件夾內會生成pyc文件。

成功之後會在同目錄下生成一個文件夾

『柒』 求python中的愷撒密碼的加密,解密,以及破解的程序

凱撒密碼作為一種最為古老的對稱加密體制,在古羅馬的時候都已經很流行,他的基本思想是:通過把字母移動一定的位數來實現加密和解密。明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例如,當偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推X將變成A,Y變成B,Z變成C。由此可見,位數就是凱撒密碼加密和解密的密鑰。
如下代碼是以偏移量為13展開計算的。123

源代碼如下:
sr1="abcdefghijklmnopqrstuvwxyz"sr2=sr1.upper()
sr=sr1+sr1+sr2+sr2
st="The Zen of Python"sResult=""for j in st: if j==" ":
sResult = sResult +" "
continue
i=sr.find(j) if(i>-1):
sResult=sResult+sr[i+13]print sResult12345678910111213

運行結果為:
Gur Mra bs Clguba

熱點內容
php模擬post提交 發布:2024-03-28 20:23:14 瀏覽:541
phptxt下載 發布:2024-03-28 20:12:37 瀏覽:475
如何更衣櫃密碼鎖密碼設置 發布:2024-03-28 19:42:09 瀏覽:483
如何將一台電腦當雲伺服器嗎 發布:2024-03-28 19:22:39 瀏覽:882
銀行dsk密碼什麼意思 發布:2024-03-28 19:22:35 瀏覽:10
我的世界伺服器怎麼解除ban人 發布:2024-03-28 19:21:47 瀏覽:828
ss怎麼用安卓 發布:2024-03-28 18:51:39 瀏覽:688
腳本注入到其他軟體運行 發布:2024-03-28 18:30:02 瀏覽:721
網易我的世界皮膚能用到伺服器嗎 發布:2024-03-28 18:24:44 瀏覽:805
access資料庫數據類型 發布:2024-03-28 18:16:04 瀏覽:301