开发者社区> 嘟囔> 正文

蓝牙自定开锁时间--Python3

简介: from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex 强制输入明文增加到16字节的倍数,在末尾补'0' def add_to_16(text): text = str(text, 'ISO-8859-1') if len(text.
+关注继续查看

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

强制输入明文增加到16字节的倍数,在末尾补'0'

def add_to_16(text):

text = str(text, 'ISO-8859-1')
if len(text.encode('ISO-8859-1')) % 16:
    add = 16 - (len(text.encode('ISO-8859-1')) % 16)
else:
    add = 0
text = text + ('\0' * add)
return text.encode('ISO-8859-1')

加密函数,传入明文和秘钥,返回密文,这三个都是bytes格式的

def encrypt(text, key):

mode = AES.MODE_ECB
text = add_to_16(text)
cryptos = AES.new(key, mode)
cipher_text = cryptos.encrypt(text)
return cipher_text

解密函数,传入密文和秘钥,返回明文,这三个都是bytes格式的

def decrypt(text, key):

mode = AES.MODE_ECB
cryptor = AES.new(key, mode)
plain_text = cryptor.decrypt(text)
return plain_text

if name == '__main__':

# 需要加密的明文。下面打印的返回值第一个为实际的bytes明文数据,第二个其实实际将bytes转成了16进制字符串以便于查看分析,但实际已经不是原来的数了,勿用b2a_hex的第二个数据给小程序,小程序接收的应该是第一个!

# 初始值
encData = []
encSum = 0x00

# 流水号
encData.append(0x00)
encSum += 0x00
encData.append(0x01)  # 流水号
encSum += 0x01

encData.append(0x4F)  # 蓝牙指令
encSum += 0x4F

for i in range(3):
    encData.append(0xEE)
    encSum += 0xEE
# ---------------------自定义时间
# 10分钟
encData.append(0x02)
encSum += 0x02
encData.append(0x58)
encSum += 0x58

# 5分钟
# encData.append(0x01)
# encSum += 0x01
# encData.append(0x2C)
# encSum += 0x2C
# ---------------------自定义时间

# 数据段
for i in range(6):
    encData.append(0xEE)
    encSum += 0xEE

# 校验和
encData.append(int(encSum / 256))
encData.append(encSum % 256)

# 明文list转为bytes类型
encBytes = bytes(encData)
print("明文为:", encBytes)
print("明文为:", b2a_hex(encBytes))

# 秘钥,字符串格式的转为bytes格式,实际需要传入的应是bytes格式
key = 'I637S01KYHH00000'.encode('ISO-8859-1')

# 将明文的bytes类型传入,加密。返回值同上,第一个为实际的bytes格式密文
enc = encrypt(encBytes, key)
print("加密后:", enc)
print("加密后:", b2a_hex(enc), len(enc))

# 解密,将bytes类型密文传入,返回值即为最后的bytes类型明文,同上
dec = decrypt(enc, key)
print("解密后:", dec)
print("解密后:", b2a_hex(dec))

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Py之jieba:Python包之jieba包(中文分词最好的组件)简介、安装、使用方法之详细攻略
Py之jieba:Python包之jieba包(中文分词最好的组件)简介、安装、使用方法之详细攻略
262 0
第04章节-Python3.5-组件BootStrap、EasyUI、JQueryUI1用法 3
EasyUI用法: 把EasyUI下载到本地,然后看文档找到自己想要的样式,然后写到自己的代码里(推荐看源码里的demo文件里的源码)[但存在大量的Ajax操作]{不推荐用} 打开 (http://www.
1494 0
语音模块语音输入树莓派打印开灯关灯源码
语音模块语音输入树莓派打印开灯关灯源码
9 0
用Python开启摄像头截屏后回传到指定邮箱!
用Python开启摄像头截屏后回传到指定邮箱!
46 0
用python控制您的安卓手机
用python控制您的安卓手机
52 0
蓝牙模块控制功能数据AT指令|学习笔记
快速学习蓝牙模块控制功能数据AT指令
135 0
便携式钻孔测斜仪及探头的连接及使用方法
在所有的应用场合,通常要在土体的钻孔内安装测斜管。测斜管有四个槽口(图 1.2),以配合测斜仪探头的滑轮(图 1.1),探头通过电缆连接至数据仪,通过测量测斜管的竖直倾斜,来探测由于地层移动引起的倾斜、成孔质量、。测斜仪探头有两组小滑轮,距离相隔 0.5m,以 0.5m 为单位进行每一段的角度测量,通过每一段的倾斜角度可计算出每一段的水平偏移量,对所有测段相对水平偏移量进行积分即可得到钻孔内任意一点相对于参照点(孔底或孔顶)的水平位移量。
26 0
简单WiFi控制小车系统(树莓派+python+web控制界面)
好丑😂 对不对 ,不过反正可以蛇皮走位就行。 蛇皮走位演示视频: 只需要 一个 index.html 和Index.py 就可以实现 简单WiFi 控制小车。 你需要准备的有
76 0
Python+Appium自动化测试(9)-自动选择USB用于传输文件(不依赖appium对手机页面元素进行定位)
Python+Appium自动化测试(9)-自动选择USB用于传输文件(不依赖appium对手机页面元素进行定位)
102 0
Python 微信机器人:调用电脑摄像头时时监控功能实现演示,调用电脑摄像头进行拍照并保存
Python 微信机器人:调用电脑摄像头时时监控功能实现演示,调用电脑摄像头进行拍照并保存
134 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载