关于python进制与字符转换的问题研究
2017-03-31 23:16
295 查看
问题背景 - 源于一次作业
作业编程统计DES算法中明文(或密钥)改变1位,2位。。。64位的情况下,密文位数的变化量情况具体要求: 编程实现
1. 在密钥不变情况下,明文改变1位,2位。。。64位,观察并统计密文位数变化规律。
2. 在明文不变情况下,密钥改变1位,2位。。。64(56)位,观察并统计密文位数变化规律。
为了使统计具有客观性,上述每种情况可以重复多次,然后求平均值。
问题
使用pyDes库进行编程,但该库中输入的原文与密钥是以字节(Byte)的单位的,而作业要求是改变位(bit)。想到用字节与进制间的转换解决该问题。于是有了关于题目的研究。
实际研究
查了这么多资料,似乎字符串是很少一步转换成2进制的。要用16进制在中间桥接。即转换过程为:字符<->16进制<->2进制。字符 <-> 16进制
首先可以学习 binascii 这个库。这个库是用于进制与ASCII之间的转换。
我主要用到以下两个方法:
binascii.hexlify(data) // 字符串<->16进制(还是字符串)
举个粟子:
binascii.unhexlify(hexstr) // 就是把上面的一串16进制的字符串变回字符形式
系统学习binascii -> python手册大法
16 <-> 2进制
这里学习python的进制转换。可以发挥你的想像力各种bin、hex、int、chr、ord天花乱坠地嵌套使用吧。
粟子:(图片中代码有错,正确的是
bin(int(hex_data,16)))
右侧学习链接强推 -> 字符转换为二进制及进制之间转换
但使用上述进制转换方法要注意开头的前缀是否你所需要的,如这里的‘0b’,在我的编程中是多余的,所以要去掉。你可以使用切片等方法。这里推荐一个format的用法。
补充
当然实际还有很多方法可以解决进制与字符串转换的问题。我使用的只是其中一种,而且也还挺复杂的。但已经比我最初想的好了!此外,在查资料学习的过程中,看到了一个直接转换的很溜的思想。在此补充给大家。
【下面代码节选自 -> C语言实现DES算法】
/*------------------------------- 字节转换成位函数 每8次换一个字节 每次向右移一位 和1与取最后一位 共64位 --------------------------------*/ void ByteToBit(bool *DatOut,char *DatIn,int Num) // OK { int i=0; for(i=0;i< Num;i++) { DatOut[i]=(DatIn[i/8]>>(i%8))&0x01; } } /*------------------------------- 位转换成字节函数 字节数组每8次移一位 位每次向左移 与上一次或 ---------------------------------*/ void BitToByte(char *DatOut,bool *DatIn,int Num) // OK { int i=0; for(i=0;i<(Num/8);i++) { DatOut[i]=0; } for(i=0;i< Num;i++) { DatOut[i/8]|=DatIn[i]<<(i%8); } }
-
总结
>
字符串<->16进制<->2进制
位运算
pydes 、binascii 库的学习
进制间的转换命令
其他细节
附:py
相关文章推荐
- sql中关于字符转换问题 cast用法
- 关于各种进制的转换与数据在编辑框中显示的若干问题
- Python中的字符串与字符编码:编码和转换问题
- 关于Delphi字符转换的问题。不会啊!!!帮帮忙!!!
- 关于2进制,8进制,16进制间的转换问题
- 编程语言的学习 ------ python3 关于编码的转换问题
- Python入门:字符转换为二进制及进制之间转换
- 关于python中将py文件转换成exe文件的问题(使用py2exe)
- 关于 mvc 中 连字符 - 和下划线 _转换的问题。
- VC中一个关于宏的使用问题,字符串之间转换,宽字符与普通字符
- 20110831日的总结--关于原始流与字符流之间的转换中的设计问题
- 关于python中解决中文字符的问题
- php关于使用iconv(...)函数对字符进行中文转换时,遇到的一个问题
- Python中的字符串与字符编码:编码和转换问题
- 关于进制转换的问题
- python-字符转换遇到的问题
- 关于Opencv python中 cvmat 和ndarray的转换问题
- 关于使用Python3进行网络爬虫的字符问题
- 关于java串口通信 接受显示 乱码的字符转换问题解决方案
- 关于PHP内部编码与mysql字符差异问题的研究