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加解密相关推荐

  1. Linux中ssh基于密匙的安全验证过程是怎样的?

    在Linux中,ssh是非常重要的存在,但很多人对"ssh"这个概念很模糊,听起来也很晦涩难懂,那么Linux ssh是什么?有什么用?这篇文章为你解答一下. SSH是一种协议.S ...

  2. 带密匙的php加密解密示例分享

    <?phpheader("content-type:text/html;charset=utf-8");$id = "http://www.jb51.net&quo ...

  3. php 密匙加密解密,带密匙的php加密解密示例分享

    这篇文章主要介绍了php加密解密示例,大家参考使用吧 复制代码 代码如下: /************************************************************* ...

  4. rsa大数加密c语言,C语言:基于OpenSSL-RSA实现RSA非对称加解密

    关于OpenSSL的介绍和安装在此不多赘述,可以在网上找到很多相关资料,各位感兴趣可以去了解下(自觉对OpenSSL开源库只是初级使用阶段,也就不在此"秀下限"了),直接进入主题, ...

  5. md5加密解密代码_Python内置方法实现基于秘钥的信息加解密

    点击关注州的先生 精彩不容错过 在实际编程开发中,我们会使用到各类的加密算法来对数据和信息进行加密.比如密码中比较常见的MD5加密,以及AES加密等等.对于密码认证来说,MD5加密是比较适合的,因为其 ...

  6. POS终端“密事”之PIN加解密

    前言 到现在,我们手上拿到了TPK和TAK工作密钥,今天我们就要来讲讲如何对PIN的加密,以及MAC的运算. 工作密钥 以下是我取得今天的工作密钥,那么运用前一章的知识快速计算出TPK和TAK (ps ...

  7. 破解HLS低延时的密匙: HLS+技术解密(一)

    大红大紫的2016直播年已经过去大半,如果盘点网络直播领域重大的技术创新,观止云首创的流式HLS技术(观止云首次提出概念并命名其为HLS+)一定值得大书特书,浓墨重彩.HLS+技术面世后在业内引起了极 ...

  8. 腾讯云服务器使用SSH密匙对登录的方法

    腾讯云Linux服务器使用SSH管理主机是很方便的,目前SSH管理主机主要有两种,即SSH密码登录Linux服务器和SSH密匙登录服务器,腾讯云服务器网建议大家选择SSH密匙登录的方法.因为开放22号 ...

  9. 使用 Python 脚本执行国密 sm2 加解密

    一.场景 工作中的一个场景:Go 需要对信息加解密,但是研究了 GmSSL Go API 文档之后,发现是依赖于 CGO 的,同事配了半天环境没配成功.于是换了一个方法,选择 Go 调 Python ...

最新文章

  1. px4驱动linux,px4开发指南——linux下qgroundcontrol地面站安装
  2. Applese 走迷宫
  3. 有趣的linux指令
  4. range和xrange的区别
  5. 小米max2 android p,这就是小米Max2?6.4英寸超大屏幕配置大升级
  6. 华为鸿蒙osbeta在哪看发布会,重磅消息!华为在发布鸿蒙OS2.0手机beta版本后,又发布搭载鸿蒙的新品!!...
  7. 用户如何有效地利用数据字典(转)
  8. HDU1225 字符串
  9. BackgroundWorker简单实用(简便的异步操作)
  10. android room_Android Room –待办事项清单应用程序
  11. Julia:String和ASCIIString
  12. 机器学习笔记(十一):优化梯度公式 | 凌云时刻
  13. 在Vue中使用Aliplayer,做视频播放或者视频监控
  14. UG与PROE哪个好用,主要看是用在哪里
  15. 远程桌面管理助手有哪些?11款最好的远程桌面软件推荐。
  16. java svg pdf_Java 插入SVG到PDF文档
  17. Anaconda虚拟环境使用及包管理
  18. 如何在云服务器上自动运行.py文件
  19. 华为荣耀畅享7的计算机在哪,华为畅享7有什么新功能_华为畅享7有哪些新功能-太平洋IT百科...
  20. CSS3实现的4种水波特效

热门文章

  1. mysql数据导出权限问题
  2. Java 连接 MS sql Server 2005
  3. 更改WSSv3站点集访问地址
  4. C++调用web服务(java事例供参考)
  5. python简单代码画曲线图教程-Python绘制折线图和散点图的详细方法介绍(代码示例)...
  6. python用什么软件编程1001python用什么软件编程-Python中免验证跳转到内容页的实例代码...
  7. python笔记基础-python基础学习笔记(一)
  8. python错误-Python错误解决
  9. 怎么安装python3-如何装python3
  10. php和python写爬虫-为什么选择用python做爬虫