导航:首页 > 编程语言 > php位异或

php位异或

发布时间:2023-01-25 23:51:27

1. 其他语言如何解密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;i<array.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;i<str.length();i++)
{
char c = (char)(str.charAt(i) ^ KEY);
str2.append(c);
}
//解密过程
for(int i=0;i<str2.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!

2. PHP语言PHP语言里的位运算符&、|、^ 、~、〈〈 、〉〉这些符号我一个也不懂,希望高手给个全面的解释!拜

"&" 按位与运算
按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。

例如:9&5可写算式如下:

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。

例如:

a<<4

指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

<?php
$a = 3;
$temp = $a<<4;
echo sprintf("%d", $temp)."\n"; //十进制

“>>” 右移运算
右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

例如:

设 a=48,

a>>4

表示把00110000右移为00000011(十进制3)。

应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定

<?php
$a = 48;
$temp = $a>>4;
echo sprintf("%d", $temp)."\n"; //十进制

3. 请教 php如何对字符串加密和解密,求一个相关的实例!

base64_decode() 解密

base64_encode()加密

<?php
$str='Thisisanencodedstring';
echobase64_encode($str);
?>

4. Java的异或与PHP的异或,急求解!!!

是1,0,报错,推出。
相邻异或,得到一个7位数。试试:看满意么。

import java.util.Scanner;

class Test {

public static void main(String[] args){

int arr[] = new int[8];
Scanner sc = new Scanner(System.in);
System.out.println("please input the binary number");
String s = sc.next();
if(s.length()==8){

for(int i=0;i<8;i++){
char c = s.charAt(i);
if(c == '1'|| c== '0'){
arr[i] = (int)c;
}else{
System.out.println("the number is wrong");
System.exit(0);

}

}
}else {
System.out.println("the number's length is not 8");
System.exit(0);
}

for(int j=0;j<arr.length-1;j++) {
int k = (arr[j])^(arr[j+1]);
System.out.print(k);
}
}
}

5. PHP:“^”符号在这里是什么意思求助!

这是异或运算符,按二进制位进行异或运算(XOR)。

其中:

0^0=0;
1^1=0;
0^1=1;
1^0=1;

举个例子:

echo101^7;//输出98

为什么呢?下面就来分析一下。

101写成二进制是1100101;

7写成二进制是111,即0000111(将两个数的位数补成一样);

根据前面的表,按位运算:

1100101
^0000111
---------------------
1100010

就得到了二进制数1100010,转化为十进制就是98。


希望能解开您的疑惑。


参见:维基网络:逻辑异或:

http://zh.wikipedia.org/wiki/%E9%80%BB%E8%BE%91%E5%BC%82%E6%88%96

6. php代码中的意思

^是“异或”操作,这是一种位运算符,运算时,先要将操作数转换成二进制,如12的二进制是:00001100,9的二进制是00001001,然后每一位独立进行异或运算,异或运算的法则是:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 1
可总结为相同数异或为0,不同数异或为1。所以12^9就是00001100^00001001=00000101(提示:每一位是分别做异或的,互不影响),即十进制的5。

7. php小白 请问与 或 异或 取反是什么意思

这些是数学逻辑运算,并不是PHP才有,这里涉及到一个布尔型数据类型的含义(真则为1,假则为0)
举个例子,假设有条件a和条件b
与关系:变量$c = $a &&$ b,只有$a与$b两个条件都满足时($a为真,判断结果等于1;且$b为真,判断结果等于1),c才为真($c = 1),否则c为假($c = 0)
或关系:变量$c = $a ||$ b,只要$a或者$b有其中一个满足时($a真$b假,$a假$b真,$a真$b真),$c为真
异或关系:变量$c = $a ^ $b,只要$a、$b条件判断结果不同($a真$b假,$a假$b真),则$c为真
取反:$c = !$a,当条件$a为真($a = 1)则$c = 0;$a为假($a = 0)则$c = 1;

8. php中字符变量 异或 '1'^'2' 的值

<?php
echo(1^2)." ";
echo('123'^'ACE')." ";
?>

你猜猜这个执行结果是什么?

在PHP里面,整数进行位运算的结果和C语言是相同的,这个你明白,我不多说。但是PHP的位运算更高级,如果左右参数都是字符串,则位运算符将操作字符的 ASCII 值。

阅读全文

与php位异或相关的资料

热点内容
如何云服务器搭建游戏 浏览:560
魔兽猎人宏命令 浏览:432
翁虹电影大全 浏览:990
如何把文件夹改变为安装包 浏览:299
地震勘探pdf 浏览:690
c语言怎样给字符串加密 浏览:583
什么网站可以看剧情 浏览:533
cad图纸空间命令 浏览:136
GRA26K 浏览:479
单片机stm32实验心得体会 浏览:618
php压缩包如何安装 浏览:647
免费看慢网站 浏览:151
外国影片女孩头一次出去上外地 浏览:479
程序员创业接到小程序订单 浏览:392
java复用反编译代码 浏览:552
qq聊天发送的文件在哪个文件夹 浏览:820
代理服务器地址格式是什么意思 浏览:444
苏e行app为什么会有登录过期 浏览:800
杰森坐牢 下象棋是什么电影 浏览:408
苹果相机也么加密 浏览:891