我一直在尝试在业余时间创建一种“一次录入”加密,以便学到一些东西。我的想法是将输入(应加密)转换为比特字符串。然后,我有一个密码(也是位字符串),并且输入已使用XOR加密。例如pw = 101001,输入= 11001,然后enc =0110。我的问题是:
binary.append((val&128)==0 ? 0 : 1);
如何工作?
我想我可以将其重写为
if(val&128)==0{
binary.append(0);
}else{
binary.append(1);
}
但是2个数字(val&128)等于一个数字(0)怎么可能? 这是我的代码:
String s ="foo";
byte[] bytes = s.getBytes();
StringBuilder binary = new StringBuilder();
for(byte[] b : bytes){
int val = b;
for(int i=0; i<8; i++){
binary.append((val&128)==0 ? 0 : 1);
val <<= 1;
}
}
System.out.println(s + " to binary: " + binary)
感谢帮助:)
答案 0 :(得分:0)
&
运算符接收两个整数值,然后按位比较它们,从而为您提供另一个整数值,该整数值是通过将两个int值以二进制格式写入彼此之间并将每个位与AND运算进行比较而生成的。
结果还是一个二进制数,该二进制数被转换回以10为基数的整数。因此,您可以将其与整数0进行比较。
示例:
15 & 7 = 7:
1111 (15) & 0111 (7) = 0111 (7)
答案 1 :(得分:0)
说明的binary.append((val&128)== 0?0:1);工作
for(byte[] b : bytes){
int val = b;
for(int i=0; i<8; i++){
binary.append((val&128)==0 ? 0 : 1);
val <<= 1;
}
}
val包含字节“ b”的整数值,每个字节有8位,这就是循环运行8次的原因,每次循环检查是否最右边的数字1。如果最右边的位是1,则在字符串生成器(可变名称二进制)中附加1,否则添加0。然后将val右移1。
binary.append((val&128)== 0?0:1);如果最右边的位是1,则将1附加到二进制(StringBuilder)上,否则将0附加。