① java用異或運算進行加密是只適用於很短一句話的嗎加密解密的程序中。打開文件輸出是換行的。但是用
位異或可以加密很長,你要控制當遇到換行操作符,原樣輸出,之後繼續加密
② 用java做實戰從鍵盤輸入字元和字元串按位異或進行加密。之後再解密
importjava.util.*;
importjava.io.*;
classTest{
publicstaticvoidmain(String[]args)throwsException{
Scannersc=newScanner(System.in);
charc=sc.next().charAt(0);
Strings=sc.next();
Stringtmp="";
for(inti=0;i<s.length();i++){
tmp+=s.charAt(i)^c;
}
System.out.println(tmp);
FileWriterfw=newFileWriter("data.txt");
fw.write(tmp);
fw.flush();
fw.close();
System.out.println("解密:");
c=sc.next().charAt(0);
sc.close();
Scanners=newScanner(newFile("data.txt"));
Stringxy="";
while(s.hasNextLine()){
xy+=s.nextLine();
}
Stringab="";
for(inti=0;i<xy.length;i++){
ab+=xy.charAt(i)^c;
}
System.out.println(ab);
}
}
③ java 位運算實現加密中為何array[i]異或的是20000將20000換成其他數字結果就全部顯示問號。求解釋
array[i] = (char) (array[i]^20000)的結果超過了char字元對應的ascII值,建議你吧20000改成20,或者你判斷char字元對應的ascII邊界值也行。
④ 用java寫一個 字元串異或 的程序
privateStringtwoStringXor(Stringstr1,Stringstr2){
byteb1[]=str1.getBytes();
byteb2[]=str2.getBytes();
bytelongbytes[],shortbytes[];
if(b1.length>=b2.length){
longbytes=b1;
shortbytes=b2;
}else{
longbytes=b2;
shortbytes=b1;
}
bytexorstr[]=newbyte[longbytes.length];
inti=0;
for(;i<shortbytes.length;i++){
xorstr[i]=(byte)(shortbytes[i]^longbytes[i]);
}
for(;i<longbytes.length;i++){
xorstr[i]=longbytes[i];
}
returnnewString(xorstr);
}
⑤ 如何利用異或運算進行簡單加密解密
利用「^」異或運算對字元串進行加密
思路: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中的異或運算符實現加密和解密的問題
String sdd= new String(bt,0,bt.length);
// bt是數組, 0 表示從第一個開始, 即對應 bt[0]
這句意義就是 將 bt 數組的內容轉化成 string ;
⑦ java將兩個字元串轉為十六進制進行異或的結果是多少進制的,怎麼做
小豬,已解答,採納即可
publicclassRectangle
{
publicstaticvoidmain(String[]args)
{
StringS1="0412134FFFFFFFFFF";
StringT1="00007770000200";
longsi=Long.parseLong(S1,16);
longti=Long.parseLong(T1);
longst=si^ti;
//很顯然是十進制0~9
//4693090553043039415
System.out.println(st);
Stringhex=Long.toHexString(st);
//412134fe30df34b7
System.out.println(hex);
}
}
⑧ java 異或 字元串找不同 是怎麼實現的
函數是運用了異或運算的特點,當兩次異或同一字元的時候,他們的結果就相互抵消(等同於沒有異或),所以嚴格說來,這個函數並不能判斷兩個字元串是否完全相同。他只是判斷把這兩個字元串,的所有字元全部統計一遍以後,是不是所有的字母都出現偶數次。如果是函數就返回0,否則就返回非0。