JAVA 通过位运算进行简单的加密

我们可以通过一个简单的位运算进行简单的加密

import java.util.Scanner;

public class Example{

  public static void main(String[]args){

    Scanner input = new Scanner(System.in);

    System.out.println("请输入一个英文字符或解密字符串");

    //获取用户输入的字符

    String password = scan.nextLine();

    //使用String类的toCharArray方法把password转换为一个新的数组

    char[] array = password.toCharArray();

    for(int i = 0;i<arry.length;i++){

      //对每个数组元素进行异或运算

      array[i] = (char)(array[i]^20000);

          }

     System.out.println("加密或解密结果如下:");

      //输出密钥

     System.err.println(new String(array));

        }

    }

时间: 2024-11-19 15:43:31

JAVA 通过位运算进行简单的加密的相关文章

JAVA中位运算简单入门

位运算是指将数转换为二进制后通过为的移动来改变数的大小. 1.&     按位与 相同位的两个数字都为1,则为1:若有一个不为1,则为0. 2.|     按位或 相同位只要一个为1即为1,否则为零. 3.^    按位异或 相同位 不同为1,相同则为0 4.~    按位取反 1的取0,0的取1 5.<<  左移 左移几位,后边添加几个0 也就是将数乘以2的几次方 6.>>  右移 右移几位,后边删除几位 也就是将数除以2的几次方 如果对数扩大或者缩小2的几次方倍,应该以

关于PHP位运算的简单权限设计

写在最前面 最近想写一个简单的关于权限处理的东西,之前我也了解过用二进制数的位运算可以出色地完成这个任务.关于二进制数的位运算,常见的就是"或.与.非"这三种简单运算了,当然,我也查看了下PHP手册,还有"异或.左移.右移"这三个运算.记得上初中时数学老师就开始唠叨个不停了,在此我也不想对此运算再作额外的说明,直接进入正题. 如何定义权限 将权限按照2的N次方来定义值,依次类推.为什么要这样子定义呐?这样子定义保证了每个权限值(二进制)中只有一个1,而它恰好对应一种

Java的位运算

左移位操作 左移位运算的符号为[<<],左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量. 左移位运算是双目运算符,操作元必须是整型类型的数据,其移动过程是:[a << n]运算的过程是通过将a的所有位都左移n位,每左移一个位,左边的最高位上的0或1被移出丢弃,并用0填充右边的低位 注意: 如果a是byte.short或int型数据,总是先计算出n%32的结果m,然后进行a<<m运算 对于long型数据,总是先计算出n%64的结果m,然后进行a <&l

JAVA语法--位运算

位运算符有:<< , >> , >>> , & , | , ^ , ~ 下面通过实验来学习这几种运算 以下的数据类型是 int 用32位表示,二进制右边的0省略 // 21和-21的二进制表示 System.out.println( Integer.toBinaryString(21));  // 10101 System.out.println(Integer.toBinaryString(-21)); // 1111111111111111111111

ch0103 位运算,简单状压dp

题意:n个顶点带权无向图,求最短hamilton路径长度(从起点0走到终点n-1,且经过每个顶点恰好一次的路径) 在看位运算的时候做到这题,觉得状态压缩的思路挺奇特的.本来n<20,O(n!*n)的算法肯定炸了,但是可以二进制表示状态 如果将i表示为二进制,i的第j位走过就为1,没走过就为0(注意二进制位从0~n-1),此处1<=i<2^n-1 用dp[i][j]表示状态i,到达第j个城市的最小值,那么i的二进制第j位为1(到达第j个城市),且i的二进制第j位取反之后,二进制第k位为1(

java中位运算^,&amp;,&lt;&lt;,&gt;&gt;,&lt;&lt;&lt;,&gt;&gt;&gt;

1.^(亦或运算) ,针对二进制,相同的为0,不同的为1 public static void main(String[] args) { System.out.println("2^3运算的结果是 :"+(2^3)); //打印的结果是: 2^3运算的结果是 :1 } 2 =======>0010 3 =======>0011 2^3就为0001,结果就是1 2.&(与运算) 针对二进制,只要有一个为0,就为0 还是上述的例子 public static void

位运算一些简单的应用

从0开始数 1.把0x4f 的第3位变成0:~(1<<3) & 0x4f 转为二进制: 1001111     最终结果:->  1000111 1110111   -> 反  0001000   得:~(1<<3) & 0x4f 2.把0xff 的第2位变成0和第6位变成0: 同上    ~((1<<6)+(1<<2))  同等于  ~((1<<6)+(1<<2))  & 0xff 3.把0x51

leetcode:single-number-ii(Java位运算)

题目: Given an array of integers, every element appears three times except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 给定一个整型数组,每个数都出现了三次(只有一个数只出现了一次),找

Java基础-一文搞懂位运算

在日常的Java开发中,位运算使用的不多,使用的更多的是算数运算(+.-.*./.%).关系运算(<.>.<=.>=.==.!=)和逻辑运算(&&.||.!),所以相对来说对位运算不是那么熟悉,本文将以Java的位运算来详细介绍下位运算及其应用. 1. 位运算起源 位运算起源于C语言的低级操作,Java的设计初衷是嵌入到电视机顶盒内,所以这种低级操作方式被保留下来.所谓的低级操作,是因为位运算的操作对象是二进制位,但是这种低级操作对计算机而言是非常简单直接,友好高效