python代码加密解密_在python中加密 – 在Javascript中解密

您的Python代码和CryptoJS代码存在许多问题:

>您使用随机IV加密Python中的一些明文.如果要检索该明文,则需要在解密期间使用相同的IV.没有IV,明文就无法恢复.通常,IV只是前置于密文,因为它不必是秘密的.因此,您需要在解密期间读取IV,而不是生成新的IV.

>您在CryptoJS中使用CBC模式(默认)而不是CFB模式.模式必须相同.另一个棘手的部分是CFB模式使用段大小进行参数化. PyCrypto默认使用8位段(CFB8),但CryptoJS仅针对128位(CFB128)的固定段实现.由于PyCrypto版本是可变的,您需要更改它.

> CryptoJS decrypt()函数将密文作为OpenSSL格式的字符串或CipherParams对象.由于您没有OpenSSL格式的字符串,因此必须将密文转换为对象.

> CryptoJS的密钥应该是WordArray而不是字符串.

>使用相同的填充.如果使用CFB8,PyCrypto不会填充明文,但在使用CFB128时需要填充. CryptoJS默认使用PKCS#7填充,因此您只需要在python中实现该填充.

Python代码(适用于版本2):

def pad(data):

length = 16 - (len(data) % 16)

return data + chr(length)*length

def unpad(data):

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

def encrypt(message, passphrase):

IV = Random.new().read(BLOCK_SIZE)

aes = AES.new(passphrase, AES.MODE_CFB, IV, segment_size=128)

return base64.b64encode(IV + aes.encrypt(pad(message)))

def decrypt(encrypted, passphrase):

encrypted = base64.b64decode(encrypted)

IV = encrypted[:BLOCK_SIZE]

aes = AES.new(passphrase, AES.MODE_CFB, IV, segment_size=128)

return unpad(aes.decrypt(encrypted[BLOCK_SIZE:]))

JavaScript代码:

var base64ciphertextFromPython = "...";

var ciphertext = CryptoJS.enc.Base64.parse(base64ciphertextFromPython);

// split iv and ciphertext

var iv = ciphertext.clone();

iv.sigBytes = 16;

iv.clamp();

ciphertext.words.splice(0, 4); // delete 4 words = 16 bytes

ciphertext.sigBytes -= 16;

var key = CryptoJS.enc.Utf8.parse("1234567890123456");

// decryption

var decrypted = CryptoJS.AES.decrypt({ciphertext: ciphertext}, key, {

iv: iv,

mode: CryptoJS.mode.CFB

});

console.log ( decrypted.toString(CryptoJS.enc.Utf8));

其他考虑:

您似乎想要使用密码作为密钥.密码短语通常是人类可读的,但密钥则不是.您可以使用包含PBKDF2,bcrypt或scrypt等功能的密码来派生密钥.

上面的代码并不完全安全,因为它缺乏身份验证.未经验证的密文可能会导致可行的攻击和未被注意的数据操作.通常,加密然后MAC方案与良好的MAC功能一起使用,例如HMAC-SHA256.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ftp服务器客户端修改密码,如何在客户端修改FTP密码

一般情况下,FTP空间申请后,用户自己都不清楚如何修改密码,下面给出方法如下:★首先,要确认FTP服务器端允许用户修改秘密。然后运行FlashFXP,在命令栏输入命令“site pswd 旧密码 新密码”如果提示信息“230…

Task.Factory.StartNew 和 Task.Run 到底有什么区别?

前言Task.Factory.StartNew 和 Task.Run 都可以创建 Task:Task.Factory.StartNew(() > { Console.WriteLine("Task.Factory.StartNew"); });Task.Run(() > { Console.WriteLine("Task.Run"); });那它们之间有什么区别呢?实现代码查看这 2…

mvc 职能划分_MVC架构的职责划分原则

来源:https://www.awaimai.com/873.html 歪麦博客最近负责一个项目,用了 Yii Framework 的 MVC 框架,刚开始自以为结构很稳健。但是随着对业务逻辑理解的深入,才开始意识到问题的严重。我错误地理解了 MVC 中的 Controller&…

Matlab clear, clc 和close函数

1、clear 作用:删除工作空间中的项目,释放系统内存 语法:

Highcharts数据表示(3)

Highcharts数据表示(3) 採用对象数组的形式,能够明白节点上每一个项目的值。可是当节点较多时,会造成大量的冗余代码。假设不写配置项名称,对象数组就能够简化二维数组。形式例如以下:data:[[Number|String , Number , Color , Nu…

Git撤销文件的修改(git checkout -- file)(git reset HEAD file)(git reset HEAD~)

1 撤销没有add到暂存储区文件 git checkout -- file 如果我们把文件rm了,git statu肯定会显示出来,我们怎么还原这个文件呢?还是用上面的命令 2 撤销到add到暂存储区文件 分2步 git reset HEAD file 上面命令把暂存区的拉到了工作区,但是这个时候文件依然修改了,我们还…

【Blog.Core开源】框架集成部门权限

(Blog.Core框架功能点概述)Blog.Core开源四年啦,一行行代码凝结了大家的热情和心血,基本功能骨架已完成,欢迎更多的公司和企业使用哟。真实公司留言盖楼可获得一对一技术指导:https://github.com/anjoy8/Bl…

[一个经典的多线程同步问题]解决方案一:关键段CS

前面提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题。 本文先介绍如何使用关键段,然后再深层次的分析下关键段的实现机制和原理。 关键段CRITICAL_SECTION一共就四个函数,下面说一下这四个函数的原型…

如何设置Matlab输出到Word中图片的大小

方法一:快速型核心方法:设置Word显示比例100%,Matlab的图像大小与屏幕所见的相同;根据Word的排版要求,估计Matlab图像在Word中的大小,进而调整图像大小。具体操作:(以下操作应对图像绘制完成后进行,图像绘制中字体大小、线宽等都与排版需要一致,比如8号字体,需要故意…

服务器线程数一直增加,.NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长...

一个 asp.net core 站点,之前运行在Linux 服务器上,运行一段时间后有时站点会挂掉,在日志中记录很多“EMFILE too many open files”的错误:Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException: Error -24 EMF…

python种颜色循环_Python 实现一个颜色色值转换的小工具

需求说明 公司的 UI 设计小哥,已经转用 Zeplin 很久了。Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的,在 Android 中的颜色表示大多情况下都需要十六进制的 RGB 表示。我的数学没有好到直接看到十进制就可以心算得到十六进制的结果&#x…

bugly中批量隐藏版本

App项目使用Bugly的内测分发功能进行整包的测试,但日积月累之后,版本就会特别多。而线上同时跑的版本可能不过三个左右,那么多版本会干扰到查看崩溃、选择版本,如何隐藏呢? 右上角,更多 –> 产品设置 –…

检查点(Checkpoint)过程如何处理未提交的事务

每次我讲解SQL Server之前,我都会先简单谈下当我们执行查询时,在SQL Server内部发生了什么。执行一个SELECT语句非常简单,但是执行DML语句更加复杂,因为SQL Server要修改内存中的相关页,并在事务日志里记录整个事务。 …

axure如何导出原件_axure导出_axure怎么导出流程图

摘要 腾兴网为您分享:axure怎么导出流程图,随身行,轻轻家教,钱宝宝,美甲帮等软件知识,以及winrar美化版,九秀直播软件,中医养生平台,酚酞瓜,4399dm,移动硬盘检…

机器学习工作坊 - 计算机视觉

点击上方蓝字关注我们(本文阅读时间:2分钟)活动介绍四月的 MS Learn 学堂,我们将进入机器学习专题。 本月三期 MS Learn 学堂,我们会以工作坊的形式,结合具体应用实例,带领大家实践计算机视觉、…

React Native之提示Unable to load script from assets ‘index.android.bundle

1 问题 Unable to load script from assets index.android.bundle. Make sure your bundle is packaged correctly or youre running a packager server. 2 分析 在android的assets目录下面,没有找到index.android.bundle文件 2 解决办法 1) 在app/src/main目录下新建assets…

SQL分组处理气象数据及注意事项

问题:从全国所有气象站点数据气候数据表中(温度,降水量,风速等)找出研究区气象站点及所需气象信息。 解决: select 台站号 as 台站号,年 as 年,降水量 as 降水量,平均气温 as 年均温 from 站点气候年数据 …

服务器硬盘如何验收,系列服务器及存储测试安装验收报告.doc

系列服务器及存储测试安装验收报告p系列UNIX服务器测试安装说明1.测试p系列UNIX服务器系统开关机及系统启动测试目的:系统操作系统是否安装完好,主机能否正常开关机。测试方法:用正常关机手段关闭主机(# shutdown),然后…

arcgis server 无法手动删除切片

背景 问题 场景如下: 切片放置在专门的文件服务器上,通过unc共享路径对外共享。文件服务器的OS为windows server2008R2想手动更新切片服务的切片。发现同一切片服务,有的比例级别文件夹可以删除或者重命名。有的比例级别不可以。不能删除的比…