本文目录一览:
- 1、其他语言如何解密PHP多字符串的异或加密
- 2、求助!什么是按位或,什么是按位异或,什么是按位与?
- 3、PHP语言PHP语言里的位运算符&、|、^ 、~、〈〈 、〉〉这些符号我一个也不懂,希望高手给个全面的解释!拜
- 4、按位异或运算符怎么用
- 5、PHP中echo 12 ^ 9;得出的结果是什么?谁能给我个完美的解释。PHP新手这边有礼了~~0.0
- 6、php 简单的异或运算
其他语言如何解密PHP多字符串的异或加密
利用“^”异或运算对字符串进行加密
思路:1.先创建字符串输入的Scanner;
2.通过char[] array = password.toCharArray();// 获取字符数组;
3.遍历字符数组,按目前理解要用到遍历:数组所有元素进行访问,比如你要输出数组里所有的信息时,就要用到
4.进行异或运算
按位做“异或”运算是:位值相同得1,不同得0
例如:
加密过程:
原解释的二进制为 1 1 0 0 ----原文
设定的key的二进制为 0 1 1 0 ----密匙
两者做“异或”结果为 0 1 0 1 ----密文
解密过程:
0 1 0 1----密文
0 1 1 0----密匙
两者“异或”就得到了原文 1 1 0 0 ----原文
详细代码:
package com.lixiyu;
import java.util.Scanner;
public class Example {
public static void main(String[] args){
Scanner sca=new Scanner(System.in);
System.out.println("请输入一个英文字符串或解密字符串");
String line=sca.nextLine();//获取用户输入信息
char[] array=line.toCharArray();//获取字符数组
for (int i=0;iarray.length;i++){//历遍字符数组
array[i]=(char) (array[i]^20000);//对数组每个元素进行异或运算
}
System.out.println("加密解密结果如下:");
System.out.println(new String(array));//输出密钥
}
}
异或运算:
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
字符'A' 的ASCII编码为65 : 00000000 01000001
取整数7 : 00000000 00000000 00000000 00000111
XOR运算后 : 00000000 00000000 00000000 01000110
简单加密算法代码如下 :
public class Test {
public static final int KEY = 7;
public static void main(String[] args) {
String str = "Hello World!";
StringBuffer str2 = new StringBuffer(); //存储加密后的字符串
StringBuffer str3 = new StringBuffer(); //存储解密后的字符串
//加密过程
for(int i=0;istr.length();i++)
{
char c = (char)(str.charAt(i) ^ KEY);
str2.append(c);
}
//解密过程
for(int i=0;istr2.length();i++)
{
char c = (char)(str2.charAt(i) ^ KEY);
str3.append(c);
}
System.out.println("原始 的字符串为:" + str);
System.out.println("加密后 的字符串为:" + str2);
System.out.println("解密后 的字符串为:" + str3);
}
}
输出:
原始 的字符串为:Hello World!
加密后 的字符串为:Obkkh'Phukc
解密后 的字符串为:Hello World!
求助!什么是按位或,什么是按位异或,什么是按位与?
1、按位或:如果两个相应的二进制位有一个为1,则该结果为1,否则为0。
2、按位异或(^):如果两个相应的二进制位值不同则为1,否则为0。
3、按位与():如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。按位的各种运算,结合图形看起来是不是还挺简单,不过这些都是正数的操作,负数还涉及到补码。
扩展资料:
注意事项:
1、如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。
2、以与运算为例说明如下:在C语言中long型占4个字节,int型占2个字节,如果一个long型数据与一个int型数据进行与运算,右端对齐后,左边不足的位依下面三种情况补足:
如果整型数据为正数,左边补16个0。
如果整型数据为负数,左边补16个1。
如果整形数据为无符号数,左边也补16个0。
参考资料来源:百度百科-按位或
参考资料来源:百度百科-异或
参考资料来源:百度百科-按位与
PHP语言PHP语言里的位运算符&、|、^ 、~、〈〈 、〉〉这些符号我一个也不懂,希望高手给个全面的解释!拜
"" 按位与运算
按位与运算符""是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。
例如:95可写算式如下:
00001001 (9的二进制补码)
00000101 (5的二进制补码)
00000001 (1的二进制补码)
?php
$a = 9;
$b = 5;
echo sprintf("%b", $a$b);
?
"|" 按位或运算
按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下:
00001001
|00000101
00001101 (十进制为13)可见9|5=13
?php
$a = 9;
$b = 5;
echo sprintf("%b", $a|$b)."\n"; //二进制
echo sprintf("%d", $a|$b)."\n"; //十进制
"^" 按位异或运算
按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下:
00001001
^00000101
00001100 (十进制为12)
?php
$a = 9;
$b = 5;
echo sprintf("%b", $a^$b)."\n"; //二进制
echo sprintf("%d", $a^$b)."\n"; //十进制
"~" 求反运算
求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。
例如~9的运算为:
~(0000000000001001)结果为:1111111111110110
?php
$a = 9;
$b = 5;
echo sprintf("%b", ~$a)."\n"; //二进制
"〈〈" 左移运算
左移运算符“”是双目运算符。其功能把“ ”左边的运算数的各二进位全部左移若干位,由“”右边的数指定移动的位数,高位丢弃,低位补0。
例如:
a4
指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
?php
$a = 3;
$temp = $a4;
echo sprintf("%d", $temp)."\n"; //十进制
“” 右移运算
右移运算符“”是双目运算符。其功能是把“ ”左边的运算数的各二进位全部右移若干位,“”右边的数指定移动的位数。
例如:
设 a=48,
a4
表示把00110000右移为00000011(十进制3)。
应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定
?php
$a = 48;
$temp = $a4;
echo sprintf("%d", $temp)."\n"; //十进制
按位异或运算符怎么用
1:“按位与”运算符()用法是如果两个相应的二进制位都为1,则该位的结果值为1否则为0。00=0,10=0,11=1
2:“按位或”运算符(|)用法是如果两个相应的二进制位有一个为1,则该位的结果值为1否则为0。00=0,10=0,11=1
0,10=1,11=1
3:“异或”运算符(^)用法是如果两个相应的二进制位为同号,则该位的结果值为1否则为0。00=1,10=0,11=1
PHP中echo 12 ^ 9;得出的结果是什么?谁能给我个完美的解释。PHP新手这边有礼了~~0.0
对,这是"^" 按位异或运算
按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1,反之结果为0;
使用sprintf 打印出 12 和 9 的二进制。结果为
1100和1001
--------------------------
运算过程 :从左到右
第一位都是1 那么得 0
第二位相异 得 1
第三位都是0 得 0
第四位相异 得 1
那么结果就是0101
转化为十进制~就是5了。
php 简单的异或运算
异或一下可求出。
?php
function showXor($a, $b){
$c=$a^$b;
printf('%x xor %x = %x br/',$a,$c,$b);
}
showXor(0xe79a, 0xc97a);
showXor(0xe520, 0xc520);
e79a xor 2ee0 = c97a
e520 xor 2000 = c520