des/3des

阅读: 评论:0

des/3des

des/3des

一、python

1、 des3

python平台的DES3 + base64 加密解密, 有两个常用的库pycrypto和pyDes

1)pycrypto

des3.py

#coding=utf-8
from Crypto.Cipher import _DES3
import base64 import json BS = _DES3.block_size def pad(s): return s + (BS - len(s) % BS) * chr(BS - len(s) % BS) #定义 padding 即 填充 为PKCS7 def unpad(s): return s[0:-ord(s[-1])] class prpcrypt(): def __init__(self, key): self.key = de = _DES3.MODE_CBC #模式为CBC self.iv = IV #self.iv 为 IV 即偏移量,ECB模式不使用IV # DES3的加密模式为CBC def encrypt(self, text): text = pad(text) cryptor = _w(self.key, de, self.iv) x = len(text) % 8 if x != 0: text = text + '' * (8 - x) # 不满16,32,64位补0 # print(text) self.ciphertext = pt(text) return base64.standard_b64encode(self.ciphertext).decode("utf-8") # DES3的解密模式为CBC def decrypt(self, text): cryptor = _w(self.key, de, self.iv) de_text = base64.standard_b64decode(text) plain_text = cryptor.decrypt(de_text) # st = str(plain_text.decode("utf-8")).rstrip('') # out = unpad(st) # return out #上面注释内容解密如果运行报错,就注释掉试试 return plain_text if __name__ == '__main__': #ECB模式不使用IV IV=b'00000000' des3 = prpcrypt('123456789012345678901234') # 自己设定的密钥 tick = { "protocolHead": "gis_fl", "protocolType": 1000000 } js = json.dumps(tick) #字典转str,再加密 #js = str(tick) print type(js) e = pt(js) # 加密内容 d = des3.decrypt(e) #解密内容 print e #加密后 print d #解密后

 参考.html

2)pyDes

参考

pyDes库

.html

des3 + base64

.htm

 

aes+base64+pcks5

pip install crypto

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2017/5/17 17:23# @Author  : tangjiale# @Site    :# @File    : AESUtil.pyfrom Crypto.Cipher import AESimport base64class AESUtil:@staticmethoddef _pad(s):return s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size)#初始化AES配置参数
@staticmethoddef _cipher(key):iv = 'w2wJCnctEG09danP'#AES/ECB/w(key=key, mode=AES.MODE_CBC, IV=iv)#AES加密def encrypt(self,key,data):encryptd = self._cipher(key).encrypt(self._pad(data))destring(encryptd)#AES解密def decrypt(slef,key,data):base64Data = base64.decodestring(data)decryptd = slef._cipher(key).decrypt(base64Data)return (decryptd)if __name__ == '__main__':key = 'xxxxxxxxxxxxxxxx'aesUtil =AESUtil()encStr = pt(key,'{"abc":"a123456","kis":"kisCloud2018","name":"金蝶20118蝶金"}')print('Python encrypt: ' + encStr)print('Python decrypt: ' + aesUtil.decrypt(key,'dUFWEbRsKTWPwHHrJLu/vJJhQIbcfjas6TMaMEG+seOhmsdbm0mkxxxxVl01bAgppvScbQ2paGfZYma6tBv7hXfKSA+ntwRaAYAPhxIe3aA='))

 

 

二、nodejs

1、 des3加密

在线工具

感谢这位哥,轻轻一百度就有现成的

var assert = require('assert');  var crypto = require('crypto');  function test_des(param) {  var key = new Buffer(param.key);  var iv = new Buffer(param.iv ? param.iv : 0)  var plaintext = param.plaintext  var alg = param.alg  var autoPad = param.autoPad  //encrypt  var cipher = ateCipheriv(alg, key, iv);  cipher.setAutoPadding(autoPad)  //default true  var ciph = cipher.update(plaintext, 'utf8', 'hex');  ciph += cipher.final('hex');  console.log(alg, ciph)  //decrypt  var decipher = ateDecipheriv(alg, key, iv);  decipher.setAutoPadding(autoPad)  var txt = decipher.update(ciph, 'hex', 'utf8');  txt += decipher.final('utf8');      assert.equal(txt, plaintext, 'fail');  }  test_des({  alg: 'des-ecb',  autoPad: true,  key: '01234567',  plaintext: '1234567812345678',  iv: null  })  test_des({  alg: 'des-cbc',  autoPad: true,  key: '01234567',  plaintext: '1234567812345678',  iv: '12345678'  })  test_des({  alg: 'des-ede3',    //3des-ecb  autoPad: true,  key: '0123456789abcd0123456789',  plaintext: '1234567812345678',  iv: null  })  test_des({  alg: 'des-ede3-cbc',    //3des-cbc  autoPad: true,  key: '0123456789abcd0123456789',  plaintext: '1234567812345678',  iv: '12345678'  })

我只用到了3des-ecb,数据格式是base64, 将加密和解密两个函数的数据格式从hex改成base64就OK了。

封装一下

 

var crypto = require('crypto');  var key_qbox10 = '123456789012345678901234';function des3Encrypt(param) {  var key = new Buffer(param.key);  var iv = new Buffer(param.iv ? param.iv : 0)  var plaintext = param.plaintext  var alg = param.alg  var autoPad = param.autoPad  var cipher = ateCipheriv(alg, key, iv);  cipher.setAutoPadding(autoPad)var ciph = cipher.update(plaintext, 'utf8', 'base64');  ciph += cipher.final('base64');   return ciph;
};  function des3Decrypt(param) {  var key = new Buffer(param.key);  var iv = new Buffer(param.iv ? param.iv : 0)  var plaintext = param.plaintext  var alg = param.alg  var autoPad = param.autoPad  var decipher = ateDecipheriv(alg, key, iv);  decipher.setAutoPadding(autoPad)  var txt = decipher.update(plaintext, 'base64', 'utf8');  txt += decipher.final('utf8');      return txt;  
};exports.decode=function(data){var para = {alg:'des-ede3',autoPad:true,plaintext:data,iv:null,key:key_qbox10};var decode_str = des3Decrypt(para);return decode_str;
}de =function(data){var para = {alg:'des-ede3',autoPad:true,plaintext:data,iv:null,key:key_qbox10};var encode_str = des3Encrypt(para);return encode_str;
}

 

demo:

decode

function recv_routine(data){var obj = JSON.parse(des3.decode(data));//console.log("<<<<<<<<<<<<<<<<<<<<"+JSON.stringify(obj));//response tickif( obj.protocolType === 1000000 ){console.log("<<<<<<<<<<<<<<<<<<<<"+JSON.stringify(obj));}
}

encode

 

三、用openssl指令来加密解密更方便

 

转载于:.html

本文发布于:2024-01-28 20:55:24,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170644652910220.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:des
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23