本文目錄一覽:
- 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
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/240887.html