通过之前的文章,我们已经知晓了Memo的大致工作原理,那就是:
发送者利用发送方的私钥和接收方的公钥生成共享密码,而接收者用接收方的私钥和发送方的公钥同样可以获取共享密码。
(图源 :pixabay)
当然了,共享密码生成还是需要经过一系列的处理,并且发送/接收方要按相同的流程和规范生成,这样才能正确地加密/解密。
那么问题来来了,明文有了,密码有了,我们用什么手段加密明文呢? 因为发送方和接收方用相同的密码加解密,所以要用对称加密算法,所谓对称加密,百度百科上这么介绍的:
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
而HIVE/STEEM的memo加密使用的是对称加密中最为常见的一种算法:AES (Advanced Encryption Standard)即高级加密标准,听听这名字,就不同凡响,哈哈。
安装pycrypto库
Python中使用AES的一种方法是使用pycrypto
库,然后使用如下语句引入AES
from Crypto.Cipher import AES
然而因为我用的是一台新机器,所以出现了如下错误提示:
ModuleNotFoundError: No module named ‘Crypto’
使用如下指令尝试安装pycrypto
pip install pycrypto
结果又出现如下错误:
configure: error: in `/tmp/pip-install-7_25hg67/pycrypto’:
configure: error: no acceptable C compiler found in $PATH
缺啥装啥:
sudo apt install gcc
又出错:
src/MD2.c:31:10: fatal error: Python.h: No such file or directory
#include “Python.h”
还是缺啥装啥:
sudo apt install python3-dev
尽管看起来敲个指令很容易,可是家里的网速,网速真的伤不起
总算下载完了,再次执行:
pip install pycrypto
安装成功,耶:
AES的使用
接下来是如何使用AES加密的问题,我把我珍藏多年的《密码编码学与网络安全——原理与实践》找了出来,然后发现根本看不懂。
steem-python中的初始化AES的核心代码如下:
但是AES.MODE_CBC
、iv
都是些什么鬼?查了半天,终于找到了:
- CBC(Cipher Block Chaining,加密块链)模式
- IV: 初始化向量
网上找了一段示例代码:
一般都是加密时用到iv,但是把iv以明文编码的形式打包到结果中,然后解密时先取出iv再参与计算:
而HIVE/STEEM的memo加密则比较先进,iv和key都是由shared_secret、nonce计算得出,同样可以在接收端计算得出,无需明文传递。
所以看起来,还是HIVE/STEEM中对Memo加密处理的方法更先进一些呢。
好了,虽然更深入的理论我是研究不明白了,但是基本应该可以上手做了,撸起袖子加油干!
相关链接
This page is synchronized from the post: ‘每天进步一点点:Memo中的加密手段 & AES加密’