栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用python和nodejs进行加密和解密

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用python和nodejs进行加密和解密

好的,我已经弄清楚了,节点使用OpenSSL,后者使用PKCS5进行填充。PyCrypto不处理填充,所以我自己做,只是在两者中都添加了’‘。

如果我在python代码中添加PKCS5填充,并在节点代码中删除了填充,则可以使用。

因此更新了工作代码。节点:

var crypto = require('crypto');var password = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';var input = 'hello world';var encrypt = function (input, password, callback) {    var m = crypto.createHash('md5');    m.update(password)    var key = m.digest('hex');    m = crypto.createHash('md5');    m.update(password + key)    var iv = m.digest('hex');    var data = new Buffer(input, 'utf8').toString('binary');    var cipher = crypto.createCipheriv('aes-256-cbc', key, iv.slice(0,16));    // UPDATE: crypto changed in v0.10    // https://github.com/joyent/node/wiki/Api-changes-between-v0.8-and-v0.10     var nodev = process.version.match(/^v(d+).(d+)/);    var encrypted;    if( nodev[1] === '0' && parseInt(nodev[2]) < 10) {        encrypted = cipher.update(data, 'binary') + cipher.final('binary');    } else {        encrypted = cipher.update(data, 'utf8', 'binary') + cipher.final('binary');    }    var enpred = new Buffer(encrypted, 'binary').toString('base64');    callback(enpred);};var decrypt = function (input, password, callback) {    // Convert urlsafe base64 to normal base64    var input = input.replace(/-/g, '+').replace(/_/g, '/');    // Convert from base64 to binary string    var edata = new Buffer(input, 'base64').toString('binary')    // Create key from password    var m = crypto.createHash('md5');    m.update(password)    var key = m.digest('hex');    // Create iv from password and key    m = crypto.createHash('md5');    m.update(password + key)    var iv = m.digest('hex');    // Decipher encrypted data    var decipher = crypto.createDecipheriv('aes-256-cbc', key, iv.slice(0,16));    // UPDATE: crypto changed in v0.10    // https://github.com/joyent/node/wiki/Api-changes-between-v0.8-and-v0.10     var nodev = process.version.match(/^v(d+).(d+)/);    var decrypted, plaintext;    if( nodev[1] === '0' && parseInt(nodev[2]) < 10) {          decrypted = decipher.update(edata, 'binary') + decipher.final('binary'); plaintext = new Buffer(decrypted, 'binary').toString('utf8');    } else {        plaintext = (decipher.update(edata, 'binary', 'utf8') + decipher.final('utf8'));    }    callback(plaintext);};encrypt(input, password, function (enpred) {    console.log(enpred);    decrypt(enpred, password, function (output) {        console.log(output);    });});

蟒蛇:

from Crypto.Cipher import AESfrom hashlib import md5import base64password = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'input = 'hello world'BLOCK_SIZE = 16def pad (data):    pad = BLOCK_SIZE - len(data) % BLOCK_SIZE    return data + pad * chr(pad)def unpad (padded):    pad = ord(padded[-1])    return padded[:-pad]def _encrypt(data, nonce, password):    m = md5()    m.update(password)    key = m.hexdigest()    m = md5()    m.update(password + key)    iv = m.hexdigest()    data = pad(data)    aes = AES.new(key, AES.MODE_CBC, iv[:16])    encrypted = aes.encrypt(data)    return base64.urlsafe_b64enpre(encrypted)def _decrypt(edata, nonce, password):    edata = base64.urlsafe_b64depre(edata)    m = md5()    m.update(password)    key = m.hexdigest()    m = md5()    m.update(password + key)    iv = m.hexdigest()    aes = AES.new(key, AES.MODE_CBC, iv[:16])    return unpad(aes.decrypt(edata))output = _encrypt(input, "", password) print(output)plaintext = _decrypt(output, "", password)print("'" + plaintext + "'")


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436655.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号