我有一个长十六进制字符串,表示一系列不同类型的值.我希望将此Hex字符串转换为字节数组,以便我可以将每个值移出并将其转换为适当的数据类型.
我在Python 2.6中尝试使用bytesvs.bytearray我不明白一些差异的原因.
一个bytes迭代器返回的字符串:
for i in bytes(b"hi"):
print(type(i))
Run Code Online (Sandbox Code Playgroud)
得到:
<type 'str'>
<type 'str'>
Run Code Online (Sandbox Code Playgroud)
但bytearray迭代器返回ints:
for i in bytearray(b"hi"):
print(type(i))
Run Code Online (Sandbox Code Playgroud)
得到:
<type 'int'>
<type 'int'>
Run Code Online (Sandbox Code Playgroud)
为什么不同?
我想编写能够很好地转换为Python 3的代码.那么,Python 3中的情况是否相同?
我从http://tools.ietf.org/html/rfc6238借用了HMAC-SHA1 Java代码,并略微修改它以使用已知输出的已知密钥/消息对进行硬编码.
然后我尝试在Python中编写相同的代码来验证结果,但是我在Python和Java中获得了不同的值.
已知Java值很好.
Java代码:
import java.lang.reflect.UndeclaredThrowableException;
import java.security.GeneralSecurityException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.math.BigInteger;
import java.util.TimeZone;
import java.util.Arrays;
public class make_hmac {
private make_hmac() {}
private static byte[] hmac_sha(String crypto, byte[] keyBytes,
byte[] text){
try {
System.out.println("Key is..." + bytesToHex(keyBytes) + "\n");
Mac hmac;
hmac = Mac.getInstance(crypto);
SecretKeySpec macKey =
new SecretKeySpec(keyBytes, "RAW");
hmac.init(macKey);
return hmac.doFinal(text);
} catch (GeneralSecurityException gse) {
throw new UndeclaredThrowableException(gse);
}
}
private static byte[] hexStr2Bytes(String hex){ …Run Code Online (Sandbox Code Playgroud) 我有一个十六进制流,如:1a2b3c4d5e6f7g但更长,我想将它分成列表中的2char十六进制值,然后将它们转换为ascii.
我有一个以字符串格式表示的字节列表,例如,当我在Python3.3中打印列表时,我得到以下输出:
DATA = ['FF', 'FF', 'FF', 'FF']
Run Code Online (Sandbox Code Playgroud)
我想将这些转换为字节,例如0xFF,0xFF,0xFF,0xFF.我尝试过bytearray()函数,但这会返回错误.
我猜我在这里错过了一些简单的东西,但我已经环顾了SO和谷歌并且到目前为止没有运气
谢谢!
python ×5
bytearray ×2
python-3.x ×2
ascii ×1
byte ×1
hex ×1
hmac ×1
java ×1
python-2.x ×1
sha1 ×1