㈠ java中的(或運算,異或運算,與運算)解釋下
java中或運算、異或運算、與運算的使用實例和解釋如下:
publicclassTest{publicstaticvoidmain(String[]args){
//1、左移(<<)
//然後左移2位後,低位補0:
////換算成10進制為20System.out.println(5<<2);//運行結果是20
//2、右移(>>)高位補符號位
//然後右移2位,高位補0:
//
System.out.println(5>>2);//運行結果是1
//3、無符號右移(>>>)高位補0
//例如-5換算成二進制後為:0101取反加1為1011
///
/我們分別對5進行右移3位、-5進行右移3位和無符號右移3位:
System.out.println(5>>3);//結果是0
System.out.println(-5>>3);//結果是-1
System.out.println(-5>>>3);//結果是536870911
//4、位與(&)
//位與:第一個操作數的的第n位於第二個操作數的第n位如果都是1,那麼結果的第n為也為1,否則為0
System.out.println(5&3);//結果為1
System.out.println(4&1);//結果為0
//5、位或(|)
//第一個操作數的的第n位於第二個操作數的第n位只要有一個是1,那麼結果的第n為也為1,否則為0
System.out.println(5|3);//結果為7
//6、位異或(^)
//第一個操作數的的第n位於第二個操作數的第n位相反,那麼結果的第n為也為1,否則為0
System.out.println(5^3);//結果為6
//7、位非(~)//操作數的第n位為1,那麼結果的第n位為0,反之。System.out.println(~5);//結果為-6}}
㈡ 如何利用異或運算進行簡單加密解密
利用「^」異或運算對字元串進行加密
思路: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!
㈢ 用JAVA設計一個簡單的加密、解密演算法,用該演算法來實現對數據的加密、解密
簡單的?
用異或就可以了..!
importjava.util.Scanner;
publicclass加密
{
privatestaticScannersc=newScanner(System.in);
publicstaticvoidmain(String[]Args)
{
System.out.println(" ================字元串加密演示===================== ");
init();
}
//初始化!
privatestaticvoidinit()
{
for(;;)
{
char[]arr=input();
jiaMi(arr,20140908);
jiaMi(20140908,arr);
}
}
//鍵盤錄取!
privatestaticchar[]input()
{
Strings=sc.nextLine();
inta=s.length();
char[]arr=newchar[a];
//char[]arr=s.toCharArray();
for(inti=0;i<s.length();i++)
{
arr[i]=s.charAt(i);
}
returnarr;
}
//加密!!
privatestaticvoidjiaMi(char[]arr,inta)
{
for(inti=0;i<arr.length;i++)
{
arr[i]=((char)(arr[i]^a));
}
System.out.println("加密完成!");
print(arr);
}
//解密!!
privatestaticvoidjiaMi(inta,char[]arr)
{
for(inti=0;i<arr.length;i++)
{
arr[i]=((char)(arr[i]^a));
}
System.out.println("解密完成");
print(arr);
}
//列印!!
privatestaticvoidprint(char[]arr)
{
for(inti=0;i<arr.length;i++)
{
System.out.print(arr[i]);
}
System.out.println(" ========================= ");
}
}
㈣ 用java做數字加密,思路如下:輸入一個四位數,每位相加,1~9分別代表ASC中的a~i
import java.util.Scanner;
public class Encpryt {
public Encpryt() {
Scanner scan = new Scanner(System.in);
System.out.println("輸入一個四位數:");
String str = scan.next();
while(str != "q"){
if (str.length()!=4) {
System.out.println("您輸入的不是4位的數字請重新輸入");
str = scan.next();
continue;
}
System.out.println("加密後的數是:");
char[] ns = new char[4];
for(int i = 0; i < 4; i++){
ns[i] = str.charAt(i);
System.out.println(ns[i] -'0' + 'a' - 1);
}
System.out.println("輸入一個四位數:");
str = scan.next();
}
}
/** * @param args
*/
public static void main(String[] args) {
new Encpryt();
}
}
㈤ java中異或是怎樣算的
i = 14,異或演算法轉換二進制,同則取0異則取1;
異或是一種基於二進制的位運算,用符號XOR或者^表示,其運演算法則是對運算符兩側數的每一個進制位同值則取0,異值則取1.
簡單理解就是不進位加法,如1+1=0,0+0=0,1+0=1.
For example:
3^5 = 6
轉成二進制後就是 0011 ^ 0101 二號位和三號位都是異值取1 末尾兩個1同值取零,所以3^5 = 0110 = 6
而 i = 50 ,j = 60;
所以:
i 的二進制 = 00110010
j 的二進制 = 00111100
同位相同取0,不同取1所以得出來的值為00001110
i = i ^ j;所以i = 00001110 = 14
異或運算符
性質
1、交換律
2、結合律(即(a^b)^c == a^(b^c))
3、對於任何數x,都有x^x=0,x^0=x
4、自反性 A XOR B XOR B = A xor 0 = A
異或運算最常見於多項式除法,不過它最重要的性質還是自反性:A XOR B XOR B = A,即對給定的數A,用同樣的運算因子(B)作兩次異或運算後仍得到A本身。這是一個神奇的性質,利用這個性質,可以獲得許多有趣的應用。 例如,所有的程序教科書都會向初學者指出,要交換兩個變數的值,必須要引入一個中間變數。但如果使用異或,就可以節約一個變數的存儲空間: 設有A,B兩個變數,存儲的值分別為a,b,則以下三行表達式將互換他們的值 表達式 (值) :
A=A XOR B (a XOR b)
B=B XOR A (b XOR a XOR b = a)
A=A XOR B (a XOR b XOR a = b)
#code:
㈥ java 位運算實現加密中為何array[i]異或的是20000將20000換成其他數字結果就全部顯示問號。求解釋
array[i] = (char) (array[i]^20000)的結果超過了char字元對應的ascII值,建議你吧20000改成20,或者你判斷char字元對應的ascII邊界值也行。
㈦ java中異或是怎樣算的
異或運算(^)都以二進制數據為基礎進行的運算。也就是說當代碼中使用到異或運算時,都會先將兩個條件進行轉換,轉換成二進制數據後,再進行運算。異域中同位如果值相同(都是0或者都是1)則為0,不同(一個是0,一個是1)為1。
例如
int a=4;
int b=6;
int c = a^b;//c的值是a和b的異或。值為2.過程
1、a的值二進制是
0000 0100 //這里去低8位,因為高位都一致。 2、b的值二進制是
0000 0110 3、異或後
0000 0010 //結果是2
㈧ 求Java中以一個正整數為key的加密解密演算法
import java.io.*; //引入io包
public class TxtEncrypt
{
public static void main(String args[ ]) //主函數
{
System.out.println("輸入一個字元作為密鑰:");
char key = System.in.read();//等待用戶輸入一個字元作為密鑰
File fileOne=new File("hello.txt"), //要加密的文件
fileTwo=new File("hello.secret");//加密後的文件
char b[]=new char[100]; //緩沖字元數組
try{
FileReader in=new FileReader(fileOne); //創建讀文件流,也可以叫文件輸入流
FileWriter out=new FileWriter(fileTwo); //創建寫文件流,也可以叫文件輸出流
int n=-1; //定義變數,存放read讀的返回值
while((n=in.read(b))!=-1) //如果變數n為-1,則文件到達末尾
{
for(int i=0;i<n;i++) //循環,從字元數組b中讀取字元
{
b[i]=(char)(b[i]^key); //加密,講字元數組b中的每個字元跟a異或,然後放入b中
}
out.write(b,0,n); //然後把b中的所有字元寫入到writer流中,也就是hello.secret文件中
}
out.close(); //讀完之後,關閉輸出流
in=new FileReader(fileTwo); //創建hello.secret文件的讀文件流
System.out.println("加密後的文件內容:"); //輸出字元串
while((n=in.read(b))!=-1) //當文件沒有到達末尾,一直執行下面的循環體
{
String str=new String(b,0,n); //把b中的字元放入字元串變數str中
System.out.println(str); //輸出str中的值 (整個循環的意思是把加密後的文件輸出到屏幕上)
}
in=new FileReader(fileTwo); //創建hello.secret文件的讀文件流
System.out.println("解密後的文件內容:"); //輸出字元串
while((n=in.read(b))!=-1) //當文件沒有到達末尾,一直執行下面的循環體
{
for(int i=0;i<n;i++) //for循環
{
b[i]=(char)(b[i]^key); //把b字元數組中的每個字元跟a異或(同一個字元異或兩次之後,得到原來的字元)
}
System.out.println(new String(b,0,n)); //輸出b中的所有字元
}
in.close(); //關閉輸入流
}
catch(IOException e)
{
System.out.println(e); //捕獲io異常
}
}
}
㈨ 誰能幫我把這段異或解密的javascript翻譯成易語言,求救
我來逐行代碼給你分析吧,至於轉成易語言的話就無能為力了。
因為本人不會易語言,所以你再找個會易語言的人根據我的翻譯在寫出易語言的代碼來吧。
/*
*這一行是定義一個函數,函數名稱是xor_str
*該函數接受兩個參數,第一個參數名稱是cipherurl,第二個是cipherkey
*由於js是弱類型語言,因此沒有參數類型的限制。
*但是根據代碼的意思可以得到這兩個參數的類型都是字元串類型
*因此,在易語言下你可先定義一個方法,該方法接受兩個字元串類型的參數
*/
var xor_str = function(cipherurl,cipherkey)
{
/*
*定義兩個局部變數
*第一個變數名為i,類型是整數類型,初始值為0
*第二個變數名為url,類型是字元串類型,初始值為""
*/
var i = 0, url = '',
/*
*定義了一個全局變數keylen,初始值為第二個參數的長度
*因為第二個參數為字元串類型,所以這個變數的初始值就是這個字元串的長度
*/
keylen = cipherkey.length,
/*
*這里又定義了一個全局變數,變數名為urllen,初始值為第一個參數的長度
*因為第一個參數為字元串類型,所以這個變數的初始值就是這個字元串的長度
*/
urllen = cipherurl.length;
/*
*開始循環,循環條件為變數i小於變數urllen,每循環一次i的值加1
*/
for(;i < urllen;i++){
/*
*定義一個變數ch
*cipherurl.charCodeAt(i) 的意思是取得cipherurl變數內第i個字元的編碼
*cipherkey.charCodeAt(i%keylen)的意思是取得第(i除以keylen的余數)個字元的編碼
*cipherurl.charCodeAt(i) ^ cipherkey.charCodeAt(i%keylen)的意思是
*把第一個編碼值和第二個編碼值按二進制位進行異或運算
*即對兩個數值的二進制寫法進行比較
*只有當相同位置上的數字只有一個1時,才返回1,
*有兩個1或者都是0則返回0,
*然後轉換成十進制數值
*如:10001(二進制) ^ 01111(二進制)得到的二進制值為11110
*最終轉成十進制是30
*/
var ch = cipherurl.charCodeAt(i) ^ cipherkey.charCodeAt(i%keylen);
/*
*String.fromCharCode(ch);意思是取得ch編碼所在的字元
*url += String.fromCharCode(ch);意思是吧ch對應的字元累加到url變數上
*/
url += String.fromCharCode(ch);
} //結束循環
//返回url的值
return url;
};
我想我應該說的夠清楚了,如果還幫不了你的話我沒辦法了。