利用「^」異或運算對字元串進行加密
思路: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 值。