我是加密和编程的新手。我只是试图让我的头脑包围一些基本概念。
我正在使用python,Crypto.Hash.SHA256
D:\client>nmake
Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
cl.exe socket.c -I../include -L../lib -lssl -lcrypto
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
cl : Command line warning D9002 : ignoring unknown option '-L../lib'
cl : Command line warning D9002 : ignoring unknown option '-lssl'
cl : Command line warning D9002 : ignoring unknown option '-lcrypto'
socket.c
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:socket.exe
socket.obj
LINK : fatal error LNK1104: cannot open file 'Ws2_32.lib'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cl.exe"' : return code '0x2'
Stop.
如果我输入
,则在REPL中from Crypto.Hash import SHA256
VS
print SHA256.new('password').digest()//j���*�rBo��)'s`=
这两项产出是什么? 他们应该怎么解释?
答案 0 :(得分:3)
在第一种情况下,您正在使用print,因此Python正在尝试将字节转换为可打印字符。不幸的是,并非每个字节都是可打印的,因此您会得到一些奇怪的输出。
在第二种情况下,由于您没有调用print,因此Python解释器会执行不同的操作。它采用返回值,在这种情况下是一个字符串,并显示字符串的内部表示。这就是为什么对于某些角色,你得到的东西是可打印的,但在其他情况下,你得到一个转义序列,如SHA256.new('password').digest()//"^\x88H\x98\xda(\x04qQ\xd0\xe5o\x8d\xc6)'s`=\rj\xab\xbd\xd6*\x11\xefr\x1d\x15B\xd8"
。
这两个输出恰好是同一摘要的两个表示。
仅供参考,在使用pycrypto查看哈希函数输出时,我强烈建议您使用\x88
代替hexdigest
。