基于隐写术的位旋转加密

Bitmasher的Python项目详细描述


基于位缓冲区旋转和隐写的Bitmasher私钥加密算法

算法

Bitmasher是基于三种加密思想结合在三次加密中的。在

  • 用旋转密钥对数据进行异或加密
  • 将异或加密的数据块与随机数据混合
  • 位旋转ROR/ROL(用于解密的ROR/ROL),基于两个随机密钥:一个定义旋转的深度,另一个-旋转的方向性。在

所以,为了打破加密的数据块,你实际上需要找出两个密钥,第二阶段混合防止统计分析。如果您有兴趣了解更多关于算法本身的知识,请看一下这张幻灯片。Buffer bit-rotating cryptography with steganography

“你好世界”的Bitmasher

>>> from Bitmasher import *
>>> n = init()
>>> d = encrypt(n, "This is a BIG secret")
>>> print(decrypt(n, *d))
b'This is a BIG secret'
>>>
  • 首先,我们必须导入Bitmasher函数。需要Python3.6或更新版本。在
  • 接下来,我们初始化加密操作的命名空间。在
  • 我们正在加密。注意,encrypt函数的第一个参数是对命名空间的引用。您可以传递msgpack序列化库支持的任何Python值。在
  • 接下来,我们解密。请注意,您必须将命名空间作为第一个参数传递。在

这一切都很简单

我的钥匙呢!!!!在

Bitmasher不信任您生成密钥。它通过按需生成密钥来维护内部的“码本”。调用init()时生成前1024个密钥。用uniq密钥加密的每个数据块。钥匙由两部分组成:

  • 私钥。在第一个过程中用作“异或”操作的模,在第三个过程中用作旋转次数。在
  • 捣碎机。定义第三道次旋转方向的数据集。在

函数encrypt返回元组列表,其中元组的第一个元素是密钥ID,第二个元素是加密数据。为了解密,您需要从codebook加载一个“used pages”,它是通过Bitmasher命名空间中的安全方式接收到的。在

如何从加密期间使用的代码本导出页面?

^{pr2}$

是的,这是一个msgpack数据。它包含了你所有的钥匙。在

如何从代码本加载页面以用于解密

>>> from Bitmasher import *
>>> n = init()
>>> d = encrypt(n, "This is a BIG secret")
.... saving and transferring cryptobook image
>>> n = cryptobook_load(n, book)
>>> print(decrypt(n, *d))
b'This is a BIG secret'

有趣的东西

比方说,你必须通过无线电波把你的秘密信息,用Bitmasher加密后传送给你的秘密通讯员。法律说明:这种类型的操作是FCC规则明确禁止的,如果你真的尝试这样做的话,我对你将陷入的麻烦不负任何责任。就这么做吧,不要为了这个。把你的直击键或划子掸去灰尘,把你的电报格式化。在

>>> d = encrypt(n, "This is a BIG secret")
>>> d
[('cd34242a-c174-4769-b945-23f805d684cf', b'\x16\xb.....

在你完成加密之后。。。在

>>> tlg = telegram(d[0][1])
>>> print(tlg)
022 186 243 218 120 121 196 018
089 191 101 201 184 042 085 108
100 047 091 015 226 152 003 093
111 121 108 086 182 134 061 035
225 037 182 083 247 230 122 123
044 072 100 097 135 029 090 080
238 024 225 141 016 247 075 009
...

深呼吸,用你的业余无线电技术来做点好事。在

73个

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何通过标记名检索多个标记中的元素以进行selenium自动化测试   java iText如何查找最后一行被拆分到下一页   java如何在hudson中的特定jdk上运行Findbugs和PMD?   如何确保java程序与java Environment 6兼容?   对形状进行分组,这样我就可以通过鼠标点击和java处理循环浏览它们   使用生成器映射对象时,java定义无效   maven Java:Struts2和IntelliJ供初学者使用   java子类不继承父类字段   java Android Grid View在Android版本kitkat上崩溃   java Hibernate从缓存返回错误的列表,即使预期的列表与缓存的列表不同   java SendGrid:模板和替换标记   用于普通生产者| Kafka流的java自定义分区器   安卓理解Java内部类中的作用域   无法从Android Studio中的非静态方法调用java非静态方法   比较两个XML响应的JavaXMLUnit   java使用keytool列出密钥   不使用Java客户端库将视频上传到YouTube数据API v3   java My While循环即使在满足条件时也不会结束   自动在外部存储字符串数据,以便以后在Java中使用