導航:首頁 > 編程語言 > 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位異或相關的資料

熱點內容
征服ol怎麼轉移伺服器 瀏覽:704
恐怖電影國語 瀏覽:947
有吃乳汁電影嗎 瀏覽:888
李采潭出演的善良的女老師3 瀏覽:173
台灣影視在線免費看 瀏覽:106
支付寶跳蹬app源碼下載 瀏覽:886
倩女銷魂 紀倩倩 瀏覽:53
周星馳粵語電影 瀏覽:516
5個小時的愛情電影在線觀看 瀏覽:975
求飛機類游戲源碼 瀏覽:406
樂釣app怎麼寫出五星報告 瀏覽:626
類似團鬼六的電影有哪些 瀏覽:660
學校門口向右轉是電影院的英文 瀏覽:961
大樂透五行演算法 瀏覽:142
英語圖解pdf 瀏覽:612
智能租房系統源碼 瀏覽:346
c編程軟體哪個好 瀏覽:674
程序員寫什麼代碼最好 瀏覽:980
大尺度電影名字 瀏覽:897
重生民國收母 瀏覽:723