xor java_java基于密匙的xor加解密
package iminto.util.common;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import iminto.util.encypt.Base64Decoder;
import iminto.util.encypt.Base64Encoder;
import iminto.util.encypt.MD5;
/**
*
* 基于密匙的xor加解密
* 可以进行安全的二进制加密
*
*/
public class XorEncrypt {
/**
* 私有密匙
*/
private String privateKey = "EnCR5hOR_inchenwang97768038542121L";
/**
* 密匙
*/
private String key;
/**
* 协同密匙
*/
private String companionKey;
/**
*
* @param key 公有密匙
* @throws NoSuchAlgorithmException
*/
public XorEncrypt(String key) throws NoSuchAlgorithmException {
this.key = MD5.md5(privateKey + key);
this.companionKey = this.genCompanion(key);
}
/**
* 设置私有密匙
* @param privateKey
*/
public void setPrivateKey(String privateKey) {
this.privateKey = privateKey;
}
/**
* 制取取协同密匙
* @param $key
* @return
*/
private String genCompanion(String key) {
StringBuilder strBuilder = new StringBuilder();
byte[] keys = key.getBytes();
strBuilder.append(privateKey);
for (byte _key : keys) {
strBuilder.append(_key);
}
return strBuilder.toString();
}
/**
* 异或加解密
* @param Mixed $content
* @param String $pKey
* @return String
*/
private String getXorBilateral(String content, String pKey) {
int len = pKey.length();
int count = content.length();
char current;
StringBuilder strBuilder = new StringBuilder();
int kIdx = 0;
int i = 0;
for (i = 0; i < count; i++) {
if (kIdx == len) {
kIdx = 0;
}
current = content.charAt(i);
strBuilder.append((char) (current ^ pKey.charAt(kIdx)));
kIdx++;
}
return strBuilder.toString();
}
/**
* 加密
* @param content
* @return String
* @throws IOException
*/
public String encrypt(String content) throws IOException {
String randKey = RandomHelper.toString(16);
content = getXorBilateral(content, this.key);
content = getXorBilateral(content, randKey);
content = randKey + content;
content = getXorBilateral(content, this.companionKey);
content = new Base64Encoder().encode(content);
return content;
}
/**
* 解密
* @param content
* @return String
* @throws IOException
*/
public String decrypt(String content) throws IOException {
content = new Base64Decoder().decode(content);
content = getXorBilateral(content, this.companionKey);
String randKey = StringHelper.subString(content, 0, 16);
content = StringHelper.subString(content, 16, -1);
content = getXorBilateral(content, randKey);
content = getXorBilateral(content, this.key);
return content;
}
public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
XorEncrypt x=new XorEncrypt("iminto");
System.out.println(x.encrypt("test"));
}
}
xor java_java基于密匙的xor加解密相关推荐
- Linux中ssh基于密匙的安全验证过程是怎样的?
在Linux中,ssh是非常重要的存在,但很多人对"ssh"这个概念很模糊,听起来也很晦涩难懂,那么Linux ssh是什么?有什么用?这篇文章为你解答一下. SSH是一种协议.S ...
- 带密匙的php加密解密示例分享
<?phpheader("content-type:text/html;charset=utf-8");$id = "http://www.jb51.net&quo ...
- php 密匙加密解密,带密匙的php加密解密示例分享
这篇文章主要介绍了php加密解密示例,大家参考使用吧 复制代码 代码如下: /************************************************************* ...
- rsa大数加密c语言,C语言:基于OpenSSL-RSA实现RSA非对称加解密
关于OpenSSL的介绍和安装在此不多赘述,可以在网上找到很多相关资料,各位感兴趣可以去了解下(自觉对OpenSSL开源库只是初级使用阶段,也就不在此"秀下限"了),直接进入主题, ...
- md5加密解密代码_Python内置方法实现基于秘钥的信息加解密
点击关注州的先生 精彩不容错过 在实际编程开发中,我们会使用到各类的加密算法来对数据和信息进行加密.比如密码中比较常见的MD5加密,以及AES加密等等.对于密码认证来说,MD5加密是比较适合的,因为其 ...
- POS终端“密事”之PIN加解密
前言 到现在,我们手上拿到了TPK和TAK工作密钥,今天我们就要来讲讲如何对PIN的加密,以及MAC的运算. 工作密钥 以下是我取得今天的工作密钥,那么运用前一章的知识快速计算出TPK和TAK (ps ...
- 破解HLS低延时的密匙: HLS+技术解密(一)
大红大紫的2016直播年已经过去大半,如果盘点网络直播领域重大的技术创新,观止云首创的流式HLS技术(观止云首次提出概念并命名其为HLS+)一定值得大书特书,浓墨重彩.HLS+技术面世后在业内引起了极 ...
- 腾讯云服务器使用SSH密匙对登录的方法
腾讯云Linux服务器使用SSH管理主机是很方便的,目前SSH管理主机主要有两种,即SSH密码登录Linux服务器和SSH密匙登录服务器,腾讯云服务器网建议大家选择SSH密匙登录的方法.因为开放22号 ...
- 使用 Python 脚本执行国密 sm2 加解密
一.场景 工作中的一个场景:Go 需要对信息加解密,但是研究了 GmSSL Go API 文档之后,发现是依赖于 CGO 的,同事配了半天环境没配成功.于是换了一个方法,选择 Go 调 Python ...
最新文章
- px4驱动linux,px4开发指南——linux下qgroundcontrol地面站安装
- Applese 走迷宫
- 有趣的linux指令
- range和xrange的区别
- 小米max2 android p,这就是小米Max2?6.4英寸超大屏幕配置大升级
- 华为鸿蒙osbeta在哪看发布会,重磅消息!华为在发布鸿蒙OS2.0手机beta版本后,又发布搭载鸿蒙的新品!!...
- 用户如何有效地利用数据字典(转)
- HDU1225 字符串
- BackgroundWorker简单实用(简便的异步操作)
- android room_Android Room –待办事项清单应用程序
- Julia:String和ASCIIString
- 机器学习笔记(十一):优化梯度公式 | 凌云时刻
- 在Vue中使用Aliplayer,做视频播放或者视频监控
- UG与PROE哪个好用,主要看是用在哪里
- 远程桌面管理助手有哪些?11款最好的远程桌面软件推荐。
- java svg pdf_Java 插入SVG到PDF文档
- Anaconda虚拟环境使用及包管理
- 如何在云服务器上自动运行.py文件
- 华为荣耀畅享7的计算机在哪,华为畅享7有什么新功能_华为畅享7有哪些新功能-太平洋IT百科...
- CSS3实现的4种水波特效
热门文章
- mysql数据导出权限问题
- Java 连接 MS sql Server 2005
- 更改WSSv3站点集访问地址
- C++调用web服务(java事例供参考)
- python简单代码画曲线图教程-Python绘制折线图和散点图的详细方法介绍(代码示例)...
- python用什么软件编程1001python用什么软件编程-Python中免验证跳转到内容页的实例代码...
- python笔记基础-python基础学习笔记(一)
- python错误-Python错误解决
- 怎么安装python3-如何装python3
- php和python写爬虫-为什么选择用python做爬虫