1)我无法在JCE AES加密的任何地方找到Java实现,但是有人知道它作为参数的字节数组是被视为有符号还是无符号?我使用的代码是:
public static byte [] ecbAesEncrypt(byte [] key, byte [] currentVector) {
SecretKeySpec keySpec = null;
Cipher cipher = null;
byte [] encryptedValue = null;
try {
keySpec = new SecretKeySpec(key, "AES");
cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
encryptedValue = cipher.doFinal(currentVector);
}
catch (Exception e) {
e.printStackTrace();
return null;
}
if (DEBUG)
printHex("AES-ECB encrypt: ", encryptedValue);
return encryptedValue;
}
2)2个有符号字节的按位异或会给出与2个无符号字节的按位异或相同的结果吗?通过这个我的意思是只是位表示将是相同的。我想是的,但只想确定。
3)问题1有点相关,什么按位运算会在有符号和无符号字节之间产生不同的结果?
答案 0 :(得分:2)
AES将字节视为纯二进制数据。不是带有符号或没有符号的数字。
Java中没有无符号字节。他们总是签名。但只有当你对它们进行整数红细胞生成时,这个标志才有意义。
Java tutorial中描述了按位运算符。