A. 5-python库之-paho mqtt通讯
连接调用connect接口,然后调用loop_forever后就开始跑了
connect的第三个参数为mqtt的心跳时间
on_connect 和 on_disconnect 为连接成功和断开的回掉函数,
添加证书,只需要在调用connect函数之前,添加下面两条内容即可。
设置账号密码,在调用connect函数之前,添加下面一条内容即可。
设置WILL主题,在调用connect函数之前,使用will_set接口设置,添加will主题和will主题的payload
主题的订阅使用subscribe接口,一般在on_connect回调函数里面设置
订阅完主题,我们的目的就是要收到订阅的数据,所以需要设置接收数据的回调函数on_message
,只要有数据发送过来on_message就会收到。
发布使用publish接口,如下
B. 求python中的恺撒密码的加密,解密,以及破解的程序
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。
如下代码是以偏移量为13展开计算的。123
源代码如下:
sr1="abcdefghijklmnopqrstuvwxyz"sr2=sr1.upper()
sr=sr1+sr1+sr2+sr2
st="The Zen of Python"sResult=""for j in st: if j==" ":
sResult = sResult +" "
continue
i=sr.find(j) if(i>-1):
sResult=sResult+sr[i+13]print sResult12345678910111213
运行结果为:
Gur Mra bs Clguba
C. python3 import Crypto 失败的解决办法 (AES对称加密使用 模块)
# 先导入所需要的包
pip3 install Crypto
# 再安装pycrypto
pip3 install pycrypto
from Crypto.Cipher import AES # 就成功了
使用说明,参见:
https://codeghar.wordpress.com/2013/09/06/beginning-aes-with-python3/
D. Python 加密程序
#coding=utf-8
'''''
Description:可逆的加密与解密
Environment:python2.5.x
Author:[email protected]
'''
importos
importsys
classCode(object):
'''''可逆的加密与解密'''
def__init__(self,key="[email protected]"):
self.__src_key=key
self.__key=self.__get_strascii(self.__src_key,True)
defencode(self,value):
'''''加密函数,加密后为一串数字'''
return"%d"%(self.__get_strascii(value,True)^self.__key)
defdecode(self,pwd):
'''''解密函数'''
ifself.is_number(pwd):
returnself.__get_strascii((int(pwd))^self.__key,False)
else:
print'requirenumber.'
defreset_key(self,key):
'''''重新设置key'''
self.__src_key=key
self.__key=self.__get_strascii(self.__src_key,True)
#===============================================================================
#内部调用接口
#===============================================================================
def__get_strascii(self,value,bFlag):
ifbFlag:
returnself.__get_str2ascii(value)
else:
returnself.__get_ascii2str(value)
def__get_str2ascii(self,value):
ls=[]
foriinvalue:
ls.append(self.__get_char2ascii(i))
returnlong("".join(ls))
def__get_char2ascii(self,char):
'''''获取单个字符的acsii码值'''
try:
return"%03.d"%ord(char)
except(TypeError,ValueError):
print"keyerror."
exit(1)
def__get_ascii2char(self,ascii):
ifself.is_ascii_range(ascii):
returnchr(ascii)
else:
print"asciierror(%d)"%ascii
exit(1)
def__get_ascii2str(self,n_chars):
ls=[]
s="%s"%n_chars
n,p=divmod(len(s),3)
ifp>0:
nRet=int(s[0:p])
ls.append(self.__get_ascii2char(nRet))
pTmp=p
whilepTmp<len(s):
ls.append(self.__get_ascii2char(int(s[pTmp:pTmp+3])))
pTmp+=3
return"".join(ls)
#================================================================================
#工具接口
#================================================================================
defis_number(self,value):
try:
int(value)
returnTrue
except(TypeError,ValueError):
pass
returnFalse
defis_ascii_range(self,n):
return0<=n<256
defis_custom_ascii_range(self,n):
return33<=n<48or58<=n<126
classUsage(object):
'''''
命令行参数读取与解析
'''
def__init__(self):
self._clsWork=Code()
self._args_dic={'arg_help':['-?','-help'],
'arg_p':['-p','-pwd'],
'arg_t':['-t','-text'],
'arg_k':['-k','-key'],
}
defhelp(self,*k):
strHelp="Usage:pwd[-options][args...]whereoptioninclude:"
strHelp+="""
-?-helpprintthishelpmessage
-k<key_str>-p<pwd_str>
-k<key_str>-t<text_str>"""
printstrHelp
defargs(self,argv_ls):
'''''dispatchcommand'''
#printargv_ls
iflen(argv_ls)<=1orlen(argv_ls)>5:
print'Unrecognizedoption'
return
cmd_dic={}
curr_cmd=''
#controlcommand
fori,vinenumerate(argv_ls[1:]):
forjinself._args_dic.items():
#addcommand
ifvinj[1]andj[0]notincmd_dic:
curr_cmd=j[0]
cmd_dic[curr_cmd]=[]
break
else:
#addargv
ifcmd_dic:
cmd_dic[curr_cmd].append(v)
#execcommand
ifcmd_dic:
self.exec_cmd(cmd_dic)
else:
print'Unrecognizedoption'
defexec_cmd(self,cmd_dic):
'''''execcmd'''
iflen(cmd_dic)==2:
if'arg_p'incmd_dicand'arg_k'incmd_dic
andlen(cmd_dic['arg_p'])==1andlen(cmd_dic['arg_k'])==1:
self._clsWork.reset_key(cmd_dic['arg_k'][0])
printself._clsWork.encode(cmd_dic['arg_p'][0])
return
elif'arg_t'incmd_dicand'arg_k'incmd_dic
andlen(cmd_dic['arg_t'])==1andlen(cmd_dic['arg_k'])==1:
self._clsWork.reset_key(cmd_dic['arg_k'][0])
printself._clsWork.decode(cmd_dic['arg_t'][0])
return
self.help()
if__name__=='__main__':
usage=Usage()
usage.args(sys.argv)
E. python中AES 用ECB模式加密之后为什么和C#加密之后的结果不一样
AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。 AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮分析、测试和征集
F. python rsa模块---生成公钥和私钥的方法
https://blog.csdn.net/six66hao/article/details/81814576
https://blog.csdn.net/whatday/article/details/97617461
https://blog.csdn.net/xiongzaiabc/article/details/88400748
https://blog.csdn.net/zhao3587717/article/details/83111082/
一.
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
对称加密算法大家共用一个密钥
数字签名: 就是为了证明该信件是确定的人发出的,而不是黑客冒充发出的
eg:
1.鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。
二.用RSA库可以生成公钥和私钥
到时候把公钥给前端,后端保存公钥和私钥
三.在用户注册/登入时,输入密码后前端会用JS对密码进行加密传送到后端
一般现在对于密码的加密解密都用RSA进行
G. Python简单加密操作
加密是将一个明文数据,按照指定的算法,运算得到一个其他的可以隐藏真实信息的密文数据,这个过程称为加密;处理的算法称为加密算法;用到的关键数据称为密钥。
解密是按照制定的算法和关键数据,将一个密文数据进行逆向运算得到的正确的明文数据的过程
如:用户账号密码存储,此时任何人都不能查看该用户的明文密码
1.原始数据
2.编码(转换为字节数据)
3.使用算法加密
4.利用盐值更新密文
5.得到加密后的数据
编码:字符串.encode(编码名称)——>字节数据
解码:字节数据.decode(编码名称)——>字符串数据
==========================================
H. python文本加密是什么
python文本加密是Python 提供了诸如 hashlib,base64 等便于使用的加密库,我们可以借助异或操作,实现一个简单的文件加密程序。
通过了解异或操作的性质,加密原理就非常清晰了。
首先将文件转换成二进制数,再生成与该二进制数等长的随机密钥,将二进制数与密钥进行异或操作,得到加密后的二进制数。
将加密后的二进制程序与密钥进行异或操作,就得到原二进制数,最后将原二进制数恢复成文本文件。
相关拓展
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。
加密之所以安全,绝非因不知道加密解密算法方法,而是加密的密钥是绝对的隐藏,流行的RSA和AES加密算法都是完全公开的,一方取得已加密的数据,就算知道加密算法也好,若没有加密的密钥,也不能打开被加密保护的信息。
单单隐蔽加密算法以保护信息,在学界和业界已有相当讨论,一般认为是不够安全的。公开的加密算法是给黑客和加密家长年累月攻击测试,对比隐蔽的加密算法要安全得多。
尽管加密或为了安全目的对信息解码这个概念十分简单,但在这里仍需对其进行解释。数据加密的基本过程包括对称为明文的原来可读信息进行翻译,译成称为密文或密码的代码形式。该过程的逆过程为解密,即将该编码信息转化为其原来的形式的过程。
以上内容参考 网络-加密
I. 密码学基础之对称加密(一)
就不给定义了,我简单解释下,就是我的信息不想让别人知道,使用 秘钥(key) 对我的信息进行 加密(encrypt) ,变成鬼符一样的 秘文(ciphertext) 。别人就算看到了,也无法识别,只有有了秘钥,把秘文 解密(decrypt) 后才能看懂信息,秘钥呢?一般人我不告诉他。我的秘钥是私密信息,所以也叫 私钥(private key) ,加密和解密用的秘钥是相同的,所以叫 “对称加密” ,也叫 “私钥加密” 。
对于明文plaintext,和对称秘钥key
加密过程 E(plaintext, key) = ciphertext
解密过程 D(ciphertext, key) = plaintext
对称加密的分为 分组密码(block cipher) 和 流密码(stream cipher) 两种类型。本文只介绍分组密码。
分组密码是每次只能处理特定长度的一块(block)数据的一类加解密算法。AES就是一种分组密码算法。AES加密算法每次可以加密的块长度是128位(bit)。
ECB模式
使用AES加密算法ECB模式,每次能加密128位数据,即16个字节。如果要加密48个字节内容,我们需要把数据分为3组,每组16个字节,分别为P1、P2、P3。P1、P2、P3加密后形成的秘文分别为C1、C2、C3,我们把C1、C2、C3依次拼接起来就成为最终的加密结果。
CBC模式
《对称加密之对称加密二》正在写作,会包含分组密码的更多模式,流密码及AES的更多知识。
DES加密:旧的加密算法,NIST规定仅能用于遗留系统和TDEA。(参考文献[CNS] 3.2章)
TDEA(Triple DEA)加密:很多资料也叫3DES(Triple DES)。(参考文献[SP800-67])
Python 可以使用 pycrypto 模块进行AES加解密。安装 pycrypto 可使用命令 pip install pycrypto 安装。
下面AES演示第一版,先看下,紧接着就会升级到第二版本。
运行一下,能正常加解密。但是,如果你把要加密的文本,从 aesAlgorithmDemo 改为 hello ,就会运行报错:
这是因为,AES的分组长度是128位,即16个字节。有些AES实现,要加密的消息长度不是16个字节的倍数需要填充。
填充的方法一般是按照PKCS#7填充标准。
如果要数据的长度不是分组的整数倍,需要填充数据到分组的倍数,如果数据的长度是分组的倍数,需要填充分组长度的数据,填充的每个字节值为填充的长度。PKCS#7支持的分组长度为1到255个字节。
举一些例子:
AES的分组长度为16个字节,不管秘钥是128位、192位还是256位。如果要加密的数据长度是5个字节,你需要填充11个字节,填充的内容位填充的长度0x0b。填充后类似下面表示
如果数据长度是30个字节,需要填充2个字节,每个字节的内容为0x02,如果数据成都恰好为16的倍数,需要填充16个字节,每个字节的内容为0x10。
弄明白填充的概念后,我们重写加解密函数如下:
这样填充后会不会可其它系统不兼容?不会。一般的AES程序都是支持PKCS#7填充的。
密码学基础之RSA与不对称秘钥
密码学基础系列
[CNS] 《密码编码学与网络安全》(第六版)
[SP800-67] NIST Special Publication 800-67 Revision 1, Recommendation for Triple Data Encryption Algorithm (TDEA) Block Cipher, January 2012.
[SSH] OpenSSH CBC模式信息泄露漏洞
[NIST SP 800-57 Part 1 Rev. 4] Recommendation for Key Management, Part 1: General
J. python的加密方式: rsa加密和解密
RSA加密是一种非对称加密,通常使用公钥加密,私钥解密。
生成文件如下图:
可以将生成的公钥、私钥粘贴复制存储起来,以便使用:
在使用中, 通常会先对数据进行bas64加密, 再对加密后的内容使用rsa加密, 最后对rsa解密后的内容进行bas64解密.