‘壹’ 遇到binascii.Error: Incorrect padding 怎么办 python
s不符合base64的padding规则。“当原数据长度不是3的整数倍时, 如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。”(引自维基base64中文条目)
当然,这可能是由于s数据不完整或有其他字符串混入导致的。
wiki:http://en.wikipedia.org/wiki/Base64
‘贰’ 急~~~~~~~~python关于ascii及进制转换问题,单个字母或符号转化成二进制或八进制数字,偶是菜鸟~
不太直观了点
def converter(char, m):
s = eval("%s(ord('%s'))" % (m.lower(), char))
if 'b' in s:
return 'Bin: %s' % (''.join(('%08s' % s.replace('b', '0'))[-8:]))
return 'Oct: %s' % s
‘叁’ Python有什么模块可以将文本文件转化成二进制文件
英文就是ascii编码嘛!
ord(num)显示字符的编码。
然后转化编码为二进制数不就可以了。
为了美化,可以每个数值添加几个零成为8位二进制数,作为一个byte,空格隔开。
python自建有bin()函数,可是返回的字符是以'0b'开头 # '0b000110'
可以使用下面的函数转换
bin = lambda n : (n > 0) and (bin(n/2) + str(n%2)) or ''
bin(2) # 10
‘肆’ python中,怎么样把特定的字符串转为二进制序列
干嘛不用binascii
>>> import binascii
>>> dir(binascii)
['Error', 'Incomplete', '__doc__', '__name__', '__package__', 'a2b_base64', 'a2b
_hex', 'a2b_hqx', 'a2b_qp', 'a2b_uu', 'b2a_base64', 'b2a_hex', 'b2a_hqx', 'b2a_q
p', 'b2a_uu', 'crc32', 'crc_hqx', 'hexlify', 'rlecode_hqx', 'rledecode_hqx', 'un
hexlify']
>>> binascii.a2b_hex("a16203")
'\xa1b\x03'
>>>
‘伍’ mac环境下python3.5.2没有binascii模块,需要怎么安装
See also
Mole base64
Support for RFC compliant base64-style encoding in base 16, 32, 64, and 85.
Mole binhex
Support for the binhex format used on the Macintosh.
Mole uu
Support for UU encoding used on Unix.
Mole quopri
Support for quoted-printable encoding used in MIME email messages.
‘陆’ 如何使用Python 3的两个库来加解密字符串
哈希
如果需要用到安全哈希算法或是消息摘要算法,那么你可以使用标准库中的 hashlib 模块。这个模块包含了符合 FIPS(美国联邦信息处理标准)的安全哈希算法,包括 SHA1,SHA224,SHA256,SHA384,SHA512 以及 RSA 的 MD5 算法。Python 也支持 adler32 以及 crc32 哈希函数,不过它们在 zlib 模块中。
哈希的一个最常见的用法是,存储密码的哈希值而非密码本身。当然了,使用的哈希函数需要稳健一点,否则容易被破解。另一个常见的用法是,计算一个文件的哈希值,然后将这个文件和它的哈希值分别发送。接收到文件的人可以计算文件的哈希值,检验是否与接受到的哈希值相符。如果两者相符,就说明文件在传送的过程中未经篡改。
让我们试着创建一个 md5 哈希:
>>> import hashlib >>> md5 = hashlib.md5() >>> md5.update('Python rocks!') Traceback (most recent call last): File "<pyshell#5>", line 1, in <mole> md5.update('Python rocks!') TypeError: Unicode-objects must be encoded before hashing >>> md5.update(b'Python rocks!') >>> md5.digest() b'\x14\x82\xec\x1b#d\xf6N}\x16*+[\x16\xf4w'
让我们花点时间一行一行来讲解。首先,我们导入 hashlib ,然后创建一个 md5 哈希对象的实例。接着,我们向这个实例中添加一个字符串后,却得到了报错信息。原来,计算 md5 哈希时,需要使用字节形式的字符串而非普通字符串。正确添加字符串后,我们调用它的 digest 函数来得到哈希值。如果你想要十六进制的哈希值,也可以用以下方法:
>>> md5.hexdigest() ''
实际上,有一种精简的方法来创建哈希,下面我们看一下用这种方法创建一个 sha1 哈希:
>>> sha = hashlib.sha1(b'Hello Python').hexdigest() >>> sha ''
可以看到,我们可以同时创建一个哈希实例并且调用其 digest 函数。然后,我们打印出这个哈希值看一下。这里我使用 sha1 哈希函数作为例子,但它不是特别安全,读者可以随意尝试其他的哈希函数。
密钥导出
Python 的标准库对密钥导出支持较弱。实际上,hashlib 函数库提供的唯一方法就是 pbkdf2_hmac 函数。它是 PKCS#5 的基于口令的第二个密钥导出函数,并使用 HMAC 作为伪随机函数。因为它支持“加盐(salt)”和迭代操作,你可以使用类似的方法来哈希你的密码。例如,如果你打算使用 SHA-256 加密方法,你将需要至少 16 个字节的“盐”,以及最少 100000 次的迭代操作。
简单来说,“盐”就是随机的数据,被用来加入到哈希的过程中,以加大破解的难度。这基本可以保护你的密码免受字典和彩虹表(rainbow table)的攻击。
让我们看一个简单的例子:
>>> import binascii >>> dk = hashlib.pbkdf2_hmac(hash_name='sha256', password=b'bad_password34', salt=b'bad_salt', iterations=100000) >>> binascii.hexlify(dk) b''
这里,我们用 SHA256 对一个密码进行哈希,使用了一个糟糕的盐,但经过了 100000 次迭代操作。当然,SHA 实际上并不被推荐用来创建密码的密钥。你应该使用类似 scrypt 的算法来替代。另一个不错的选择是使用一个叫 bcrypt 的第三方库,它是被专门设计出来哈希密码的。
‘柒’ 使用哪一个Python模块,可以对数字的大端存储和小端存储进行转换
你可以用下面的代码
import binascii
def big_small_end_convert(data):
return binascii.hexlify(binascii.unhexlify(data)[::-1])
if __name__ =='__main__':
di = b'3d64f7247a'
do = big_small_end_convert(di)
print(di)
print(do)
‘捌’ 如何将二进制码转换成ASCII码
每一个ASCII码都对应一个字符图形,ASCII有个码表,是个标准,你可以网络搜一下。它主要用于系统和字符输入输出设备之间的信息交换。如果你按下键盘上带图形“5”的键,键盘就会送给主机一个它对应的ASCII码35H;如果你送35H给字符显示设备,它就会显示设备内预先存储好的图形“5”到屏幕上。
另外,BCD码一般不说成2进制数,BCD码集{00H,,,09H}和自然一位数数集{0,,,9}是一一对应关系。拿到一个BCD码,等于拿到一个自然数,把它翻译成ASCII码,一般的目的都是为了送字符显示设备显示。如果你把16进制数05H送给字符显示设备,它一定显示不出“5”这样的东西来,把05H转换成BCD码(十进制),再转换成ASCII码,然后输出,就OK了。如果是16进制的0AH,转换成BCD是10H,转换成ASCII分别是31H和30H,送给字符显示器,屏幕上就出现了“10”的字样。
‘玖’ python将十六进制转为十进制数字的程序怎么写
把十六进制的字串转为十进制数字:
Python代码
>>>
print
int('ff',
16)
255
>>>
print
int('ff',
16)
255
把十进制数字转换为以十六进制表示之字串,可调用内置的hex()函数:
Python代码
>>>
print
hex(255)
0xff
>>>
print
hex(255)
0xff
调用BinAscii模块其中的b2a_hex()函数,可把以ASCII编码的文字以十六进制表示:
Python代码
>>>
print
binascii.b2a_hex('A')
41
>>>
print
binascii.b2a_hex('A')
41
反之也可把以十六进制表示的文字,换成以ASCII编码的文字:
Python代码
>>>print
binascii.a2b_hex('41')
“A”