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 = key
self.mode = _DES3.MODE_CBC #模式为CBC
self.iv = IV #self.iv 为 IV 即偏移量,ECB模式不使用IV # DES3的加密模式为CBC
def encrypt(self, text):
text = pad(text)
cryptor = _DES3.new(self.key, self.mode, self.iv) x = len(text) % 8
if x != 0:
text = text + '\0' * (8 - x) # 不满16,32,64位补0
# print(text)
self.ciphertext = cryptor.encrypt(text)
return base64.standard_b64encode(self.ciphertext).decode("utf-8") # DES3的解密模式为CBC
def decrypt(self, text):
cryptor = _DES3.new(self.key, self.mode, self.iv)
de_text = base64.standard_b64decode(text)
plain_text = cryptor.decrypt(de_text)
# st = str(plain_text.decode("utf-8")).rstrip('\0')
# 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 = des3.encrypt(js) # 加密内容
d = des3.decrypt(e) #解密内容
print e #加密后
print d #解密后
参考https://www.cnblogs.com/qq405921147/p/9176691.html
2)pyDes
参考
pyDes库
https://www.cnblogs.com/txw1958/archive/2012/07/20/python-des-3des.html
https://blog.csdn.net/sbdxxcjh/article/details/38460409
des3 + base64
https://www.jb51.net/article/112549.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.py
from Crypto.Cipher import AES
import base64
class AESUtil:
@staticmethod
def _pad(s):
return s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size)
#初始化AES配置参数
@staticmethod
def _cipher(key):
iv = 'w2wJCnctEG09danP'
#AES/ECB/PKCS5Padding
return AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
#AES加密
def encrypt(self,key,data):
encryptd = self._cipher(key).encrypt(self._pad(data))
return base64.encodestring(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 = aesUtil.encrypt(key,'{"abc":"a123456","kis":"kisCloud2018","name":"金蝶20118蝶金"}')
print('Python encrypt: ' + encStr)
print('Python decrypt: ' + aesUtil.decrypt(key,'dUFWEbRsKTWPwHHrJLu/vJJhQIbcfjas6TMaMEG+seOhmsdbm0mkxxxxVl01bAgppvScbQ2paGfZYma6tBv7hXfKSA+ntwRaAYAPhxIe3aA='))
二、nodejs
1、 des3加密
在线工具 http://tool.chacuo.net/crypt3des
感谢这位哥,轻轻一百度就有现成的
http://mygo.iteye.com/blog/2018882
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 = crypto.createCipheriv(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 = crypto.createDecipheriv(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 = crypto.createCipheriv(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 = crypto.createDecipheriv(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;
}
exports.encode =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 tick
if( obj.protocolType === 1000000 ){
console.log("<<<<<<<<<<<<<<<<<<<<"+JSON.stringify(obj));
}
}
encode
client.connection.sendUTF(des3.encode(JSON.stringify(proto.tick)));
三、可以直接用openssl指令来加密解密
https://blog.csdn.net/jasonhwang/article/details/2336049
des/3des的更多相关文章
- DES & 3DES 加密算法
JAVA坑 跟其他公司java的对接口,一个细节对到吐血,具体: DesUtil.java(别人的反例) //package base_class; import java.io.IOExceptio ...
- 使用openssl库实现des,3des加密
原文地址: 使用openssl库实现des,3des加密 主要是调整了一下格式,以及一些变量的类型,以解决在VC2008下无法编译通过的问题. #include <stdio.h> #in ...
- java和c++中的DES\3DES\Base64
首先来看一段java中对字符串加解密的代码: //密钥 private String key = "123456789012345678901234"; //解密过程,先用Base ...
- Java Base64、HMAC、SHA1、MD5、AES DES 3DES加密算法
● BASE64 严格地说,属于编码格式,而非加密算法 ● MD5(Message Digest algorithm 5,信息摘要算法) ● SHA(Secure Hash Algo ...
- Java利用DES/3DES/AES这三种算法分别实现对称加密
转载地址:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了 ...
- DES/3DES/AES 三种对称加密算法实现
1. 简单介绍 3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES ...
- 加密算法 DES 3DES RSA AES 简介
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为[密文],使其只能在输入相应的[密钥]之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人 ...
- C# 加密解密(DES,3DES,MD5,Base64) 类
public sealed class EncryptUtils { #region Base64加密解密 /// <summary> ...
- java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4
概述 信息安全基本概念: DES(Data Encryption Standard,数据加密标准) 3DES(Triple DES,三重数据加密算法(TDEA,Triple Data Encrypti ...
- DES/3DES/AES区别
公元前400年,古希腊人发明了置换密码.1881年世界上的第一个电话保密专利出现.在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用. DES 1977年1月,美国 ...
随机推荐
- 深度剖析java编码,彻底解决java乱码问题_1
理解: 1,Java编译器(即编译成class文件时) 用的是unicode字符集. 2,乱码主要是由于不同的字符集相互转换导致的,理论上各个字符的编码规则是不同的,是不能相互转换的,所以根本解决乱码 ...
- I2C和SPI
I2C(Inter-Integrated Circuit)总线 两线式串行总线,用于连接微控制器及其外围设备.是微电子通信控制领域广泛采用的一种总线标准.它是同步通信的一种特殊形式,具有接口线少,控制 ...
- javascript 实现java中的Map
javascript实现java中的Map,代码是在国外的一个网站上看到的(http://stackoverflow.com/questions/368280/javascript-hashmap-e ...
- ]flexslider 中文文档 使用教程 参数手册
[原创]flexslider 中文文档 使用教程 参数手册 要改前人用的flexslider功能,但苦于找不到详细的文档教程,折磨了好久……(所以我才说不爱乱用插件) 为了福利下之后也苦于这个问题 ...
- 【BZOJ】1639: [Usaco2007 Mar]Monthly Expense 月度开支(二分)
http://www.lydsy.com/JudgeOnline/problem.php?id=1639 同tyvj1359,http://www.cnblogs.com/iwtwiioi/p/394 ...
- django admin后台css样式丢失
尼玛 坑爹啊 怎么光秃秃的,跟人家的不一样啊 打开firebug 发现报错,找不到css 通过google找到原因,是因为admin所需的js ,css等静态文件虽然都在django的安装目录内,但是 ...
- 如何用C语言读写文件
#include "stdio.h"#include <stdlib.h> main(){ FILE *fp1;//定义文件流指针,用于打开读取的文件 FILE *fp ...
- 【BZOJ3436】小K的农场 差分约束
[BZOJ3436]小K的农场 Description 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了, ...
- 160309、Spring AOP操作action时无法注入,报空指针错误
今天帮同事看个问题,action注入失败,代码没问题,主要是stuts2权限移交的问题,特此记录一下 Spring AOP操作action时无法注入,报NullPointer异常 当使用Spring ...
- 160323、理解Java虚拟机体系结构
今天看到一篇文章,觉得写得不错,特拿来跟大家分享一下 1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一 ...