导航:首页 > 编程语言 > java异或解密

java异或解密

发布时间:2023-01-21 09:23:36

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;
};

我想我应该说的够清楚了,如果还帮不了你的话我没办法了。

阅读全文

与java异或解密相关的资料

热点内容
服务器上如何查看服务器的端口 浏览:676
单片机服务器编译 浏览:768
单口usb打印机服务器是什么 浏览:859
战地五开服务器要什么条件 浏览:954
在word中压缩图片大小 浏览:253
javatomcat图片 浏览:417
程序员生产智能创意 浏览:65
汇和银行app怎么登录 浏览:381
腾讯服务器如何上传源码 浏览:745
单片机的原理概述 浏览:512
火控pdf 浏览:267
如何复制云服务器centos环境 浏览:984
债权pdf 浏览:303
红色番字的app怎么下载 浏览:876
云服务器流程教课 浏览:704
中国农业银行app怎么没有网 浏览:999
几率表算法 浏览:904
程序员理工科 浏览:708
企业邮箱登录收件服务器地址 浏览:560
计算机思维与算法设计的重要性 浏览:664