pkcs7 python ecb ebe
来源:互联网 发布:开核软件 编辑:程序博客网 时间:2024/05/22 04:45
一、关于PyCrypto
由于我们今天主要调用PyCrypto库来实现加密,所以这里还是稍微做些介绍吧!PyCrypto是一个免费的加密算法库,支持常见的DES、AES加密以及MD5、SHA各种HASH运算。我们可以在其官方主页下载最新版本:https://www.dlitz.net/software/pycrypto/,我编写程序时最新的是v2.6.1,下载之后得到一个zip的发布包,其中提供了setup.py文件,可以知道该程序包是使用Distutils分发的,基本的命令应该是:
点击(此处)折叠或打开
python setup.py build
python setup.py install
=====如果提示找不到python.h要么python版本不是2.6要么就是没有devel安装
yum install python-devel
function mcrypt_decrypt ($cipher, $key, $data, $mode, $iv = null) {}
$str = str_replace(array('[0]', '[1]'), array('+', '/'), $str);
$str = base64_decode($str);
$key = strtoupper(md5($_secret_key));
$string = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB);
class MyCrypt():
def __init__(self, key):
self.key = key
self.mode = AES.MODE_ECB
self.padding = '\0'
def encrypt(self, text):
cryptor = AES.new(self.key, self.mode)
length = 16
count = text.count('')
if count < length:
add = (length - count) + 1
text += (self.padding * add)
elif count > length:
add = (length - (count % length)) + 1
text += (self.padding * add)
self.ciphertext = cryptor.encrypt(text)
return self.ciphertext
def decrypt(self, text):
cryptor = AES.new(self.key, self.mode)
plain_text = cryptor.decrypt(text)
return plain_text.rstrip("\0")
if __name__ == '__main__':
key = '1234567890abcdef'
data = '{"a": "123中文", sss} '
ec = MyCrypt(key)
encrpt_data = ec.encrypt(data)
decrpt_data = ec.decrypt(encrpt_data)
print encrpt_data, decrpt_data, decrpt_data == data
from base64 import b64encode, b64decode
print b64encode(encrpt_data)
=========
==== ====
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@author: rui.xu
#这里使用pycrypto?库
#按照方法:easy_install pycrypto?
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
class prpcrypt():
def __init__(self,key):
self.key = key
self.mode = AES.MODE_CBC
#加密函数,如果text不足16位就用空格补足为16位,
#如果大于16当时不是16的倍数,那就补足为16的倍数。
def encrypt(self,text):
cryptor = AES.new(self.key,self.mode)
#这里密钥key 长度必须为16(AES-128),
#24(AES-192),或者32 (AES-256)Bytes 长度
#目前AES-128 足够目前使用
length = 16
count = len(text)
if count < length:
add = (length-count)
#\0 backspace
text = text + ('\0' * add)
elif count > length:
add = (length-(count % length))
text = text + ('\0' * add)
self.ciphertext = cryptor.encrypt(text)
#因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
#所以这里统一把加密后的字符串转化为16进制字符串
return b2a_hex(self.ciphertext)
#解密后,去掉补足的空格用strip() 去掉
def decrypt(self,text):
cryptor = AES.new(self.key,self.mode)
plain_text = cryptor.decrypt(a2b_hex(text))
return plain_text.rstrip('\0')
if __name__ == '__main__':
pc = prpcrypt('keyskeyskeyskeys') #初始化密钥
import sys
e = pc.encrypt(sys.argv[1]) #加密
d = pc.decrypt(e) #解密
print "加密:",e
print "解密:",d
======pkcs7 这个蛮重要的,不然就不一样的编码了。。。。
For Linux or Mac and other OS:
https://www.dlitz.net/software/pycrypto/
Step 2: Keep pkcs7.py file in your root directory.
https://github.com/janglin/crypto-pkcs7-example/blob/master/pkcs7.py
Step 3: First you have to define a self-created 16 digit key( key and IV will be 16 digit, 32,64…) which you know, only that key will decrypt data otherwise it will not decrypt. Here I am doing encoding by PKCS7 then encryption by crypto and again encoded by base64.
How to decrypt data
For decryption we have to follow apposite procedure means 1st we have to decode by base64 , decrypt by Crypto and then decode by PKCS7.
?
1
2
3
4
5
decodetext = base64.b64decode(enc_cipher)
aes = AES.new(key, AES.MODE_CBC, iv)
cipher = aes.<b style="color:#000;background:#66ff99">decrypt</b>(decodetext)
pad_text = encoder.decode(cipher)
print pad_text
- pkcs7 python ecb ebe
- python md5和AES/ECB/pkcs7加密
- openssl aes256 ecb PKCS7
- PHP DES加密/解密 ECB 、pkcs5/pkcs7
- pkcs7
- Python: 实现pkcs7格式数字签名方法_20170407_七侠镇莫尛貝
- python 实现DES加密 ECB模式
- python加密模块使用,aes128,ecb模式
- 可以相互解密的C#版及C++版DES算法代码(包括ECB、CBC模式,Zeros、PKCS7填充,以及Base64编解码)
- pkcs7 pkcs12
- pkcs7 - 1
- pkcs7 - 2
- PKCS7填充
- AES ECB加密实现(java/php/python)
- 用python实现aes ECB/CBC/CTR/CCM 的可执行文件
- PKCS1签名&PKCS7签名&PKCS7信封格式
- OpenSSL命令---pkcs7
- x.509 PKCS12 PKCS7
- bzoj-3307 雨天的尾巴
- 黑马程序员——基础知识——数据类型、运算符
- 找出第k大的数
- MySql技巧之REPLACE INTO
- 51nod1433
- pkcs7 python ecb ebe
- 随机抽取一张纸牌
- Android组件系列----Intent详解
- (转载)射频识别技术漫谈(14)——Mifare S50与S70的存取控制
- 博弈题集
- android开发步步为营之78:自定义样式ProgressBar
- Windows环境下修改Eclipse随笔提示
- 人民币支付
- java记——bool型初接触