Java实现简单异或加密

零、需求

在做一个简单的Web项目,需要把账号密码以Cookie的形式存储到浏览器中记住,不能直接明文,故需要一种简单的加密方式,想到了异或加密。

壹、实现


/**
* 异或操作
* @param rawData 要异或的字节数组
* @param number 运算数
* @return 异或运算后的字节数组
*/
public static byte[] Xor(byte[] rawData, int number) {
byte[] encodeData = new byte[rawData.length];
for (int i = 0; i < rawData.length; i++) //遍历字符数组
{
encodeData[i] = (byte) (rawData[i] ^ number); //对每个数组元素进行异或运算
}
return encodeData;
} /**
* 异或加密
* @param rawStr 原文
* @param key 密钥
* @return 密文
*/
public static String EncodeByXor(String rawStr, String key) {
// 通过字符串拿到密钥
int number = 1;
for (int i = 0; i < key.length(); i++) {
number *= key.charAt(i);
} // 转成字节数组
byte[] rawData = rawStr.getBytes(StandardCharsets.UTF_8);
byte[] encodeData = Xor(rawData, number); // 把字节数组转成某种格式的字符串,方便传输(格式可以自定义,好解析就行)
StringBuilder encodeStr = new StringBuilder();
for (byte b : encodeData) {
encodeStr.append(b).append("x");
} return encodeStr.toString();
} /**
* 异或解密
* @param encodeStr 密文
* @param key 密钥
* @return 原文
*/
public static String DecodeByXor(String encodeStr, String key) {
// 通过字符串拿到密钥
int number = 1;
for (int i = 0; i < key.length(); i++) {
number *= key.charAt(i);
} // 解析EncodeByXor方法中的字节数组格式,找到加密后的字节数组
String[] strings = encodeStr.substring(0,encodeStr.length()-1).split("x");
byte[] rawData = new byte[strings.length];
for (int i = 0; i < strings.length; i++) {
rawData[i] = Byte.parseByte(strings[i]);
} // 异或一下
byte[] encodeData = Xor(rawData, number); // 重新编码成原始字符串
return new String(encodeData,StandardCharsets.UTF_8);
} /**
* 测试
* @param args
*/
public static void main(String[] args) {
String enStr = EncodeByXor("异或加密如果同时知道原文和密文,则对比原文和密文可以推算出密钥,因此异或加密安全性较低,一般只用于简单的加密。","这个是一个秘钥");
System.out.println("加密后:");
System.out.println(enStr); String deStr = DecodeByXor(enStr,"这个是一个秘钥");
System.out.println("解密后:");
System.out.println(deStr);
}

测试结果:

加密后:
-27x-68x-126x-26x-120x-106x-27x-118x-96x-27x-81x-122x-27x-90x-126x-26x-98x-100x-27x-112x-116x-26x-105x-74x-25x-97x-91x-23x-127x-109x-27x-114x-97x-26x-106x-121x-27x-110x-116x-27x-81x-122x-26x-106x-121x-17x-68x-116x-27x-120x-103x-27x-81x-71x-26x-81x-108x-27x-114x-97x-26x-106x-121x-27x-110x-116x-27x-81x-122x-26x-106x-121x-27x-113x-81x-28x-69x-91x-26x-114x-88x-25x-82x-105x-27x-121x-70x-27x-81x-122x-23x-110x-91x-17x-68x-116x-27x-101x-96x-26x-83x-92x-27x-68x-126x-26x-120x-106x-27x-118x-96x-27x-81x-122x-27x-82x-119x-27x-123x-88x-26x-128x-89x-24x-66x-125x-28x-67x-114x-17x-68x-116x-28x-72x-128x-24x-120x-84x-27x-113x-86x-25x-108x-88x-28x-70x-114x-25x-82x-128x-27x-115x-107x-25x-102x-124x-27x-118x-96x-27x-81x-122x-29x-128x-126x
解密后:
异或加密如果同时知道原文和密文,则对比原文和密文可以推算出密钥,因此异或加密安全性较低,一般只用于简单的加密。

贰、总结

异或加密如果同时知道原文和密文,则对比原文和密文可以推算出密钥,因此异或加密安全性较低,一般只用于简单的加密。

叁、参考文档

https://www.jb51.net/article/67809.htm

【Java】Java实现简单异或加密的更多相关文章

  1. Java之英格玛简单实现以及加密验证码的应用

    最近看了一部电影<模仿游戏>,<模仿游戏>中艾伦·图灵破译英格玛让我对英格玛产生了好奇,于是就开始翻阅资料对其进行研究,但是毕竟智慧有限,所以我这里用Java实现一个简单的英格 ...

  2. JAVA中简单的MD5加密类(MD5Utils)

    MD5加密分析:   JDK API:   获取对象的API:   加密的API:   package cn.utils; import java.security.MessageDigest; im ...

  3. java 对视频和图片进行加密解密[转]

    是时候回到文件加密与解密的具体实现这个主题上来了.后续的举例均采用图片(包括GIF动画)类型,而其他类型资源的实现原理相同,就不一一给出了.首先来看对一幅JPG类型图片进行异或加密的Java实现,由于 ...

  4. Java之OutOfMemoryError简单分析

    Java之OutOfMemoryError简单分析 最近编码遇到了Java内存溢出的问题,所以就想顺便总结一下几种导致Java内存溢出的栗子,以及碰到Java内存溢出要如何去解决. Java堆溢出 J ...

  5. Java 异步处理简单实践

    Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...

  6. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  7. Java中的简单工厂模式

    举两个例子以快速明白Java中的简单 工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就 ...

  8. 【JAVA零基础入门系列】Day12 Java类的简单应用

    俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...

  9. java Socket实现简单在线聊天(二)

    接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进 ...

  10. Java消息系统简单设计与实现

    前言:由于导师在我的毕设项目里加了消息系统(本来想水水就过的..),没办法...来稍微研究研究吧..简单简单... 需求分析 我的毕设是一个博客系统,类似于简书这样的,所以消息系统也类似,在用户的消息 ...

随机推荐

  1. 万字图文:SaaS业务架构、价值流、业务能力、业务流程、业务对象、组织架构

    大家好,我是汤师爷~ 本文为读者提供一个SaaS业务架构的系统性框架,探讨业务架构分析的核心要素,帮助SaaS企业深入剖析目标客户的业务模式,全面理解他们的业务架构. 无论你是SaaS创业者.产品经理 ...

  2. 一篇解决编译原理大作业,基于Flex、Bison设计编译器(含语法分析树和符号表)

    1.工具简单介绍 Flex 和 Bison 是编译器开发中常用的两个工具,分别用于生成词法分析器和语法分析器.它们通常一起使用,共同完成源代码的词法分析和语法分析工作. Flex: Flex通过读取一 ...

  3. c# 调用DeepAI

    包括画卡通画,找出2张图片的相似度,电脑做梦的图片生成,利用GTP-2的文本续写. using System; using System.Collections.Concurrent; using S ...

  4. MVCC基本原理

    在介绍MVCC概念之前,我们先来想一下数据库系统里的一个问题:假设有多个用户同时读写数据库里的一行记录,那么怎么保证数据的一致性呢?一个基本的解决方法是对这一行记录加上一把锁,将不同用户对同一行记录的 ...

  5. Spring,Spring Ioc,Bean详解

    Spring框架 Spring框架是Java应用最广的框架,其的成功来自于理念,并非是技术,其中几个理念非常重要,例如IoC(控制反转),AOP(面向切面编程) Spring的优势 低耦合/低侵入(解 ...

  6. 0425-字符输入流FileReader

    package A10_IOStream; import java.awt.datatransfer.StringSelection; import java.io.IOException; impo ...

  7. 小程序之navigator跳转方式

    navigator中的open-type可以决定小程序的跳转方式: 是否关闭当前页面 或者说以何种方式进行跳转 标签<navigator>中 open-type属性表示小程序的跳转方式: ...

  8. 使用Chainlit快速构建一个对话式人工智能应用体验DeepSeek-R1

    Chainlit是一个开源的 Python 包,用于构建可用于生产的对话式人工智能. DeepSeek-R1 是一款强化学习(RL)驱动的推理模型,解决了模型中的重复性和可读性问题.在 RL 之前,D ...

  9. 初识VPC网络的能力

    本文分享自天翼云开发者社区<初识VPC网络的能力>,作者:布小匠 VPC网络的来源 在云计算早期是没有VPC的概念的,有的是虚拟网络和虚拟路由器的功能.虚拟网络的作用是为用户提供一个虚拟的 ...

  10. kubernets学习笔记二

    Kubernetes部署"容器化应用" Kubernetes整体架构 何为"容器化应用"? 通俗点来说,就是你把一个程序放在docker里部署,这个docker ...