- 浏览: 96739 次
- 性别:
- 来自: 湖南
文章分类
最新评论
-
化蝶自在飞:
还是走腾讯应用宝吧.
微信扫二维码下载客户端被挡 -
hyper1987stone:
java敏感词过滤 -
菜鸟级JAVA:
先引用2个js(一个jquery、一个日期插件),然后在需要使 ...
java jsp 日期控件 -
woshishen__74:
你的有点问题 是不是少了一个jar包?????
java jsp 日期控件
/**
*
* 项目名称:
* 类名称:RC4Util
* 类描述:RC4加解密
* 创建人:
* 创建时间:
* 修改人:
* 修改时间:
* 修改备注:
*
* @version V1.0
*
*/
package util;
public class RC4Util {
/**
* 字节数组rc4解密成字符串
*
* @param data 字节数组
* @param key
* @return
*/
public static String decry_RC4(byte[] data, String key) {
if (data == null || key == null) {
return null;
}
return asString(RC4Base(data, key));
}
/**
* 字符串rc4解密成字符串
*
* @param data
* @param key
* @return
*/
public static String decry_RC4(String data, String key) {
if (data == null || key == null) {
return null;
}
return new String(RC4Base(HexString2Bytes(data), key));
}
/**
* 字符串rc4加密成字节数组
*
* @param data
* @param key
* @return
*/
public static byte[] encry_RC4_byte(String data, String key) {
if (data == null || key == null) {
return null;
}
byte b_data[] = data.getBytes();
return RC4Base(b_data, key);
}
/**
* 字符串rc4加密成字符串
*
* @param data
* @param key
* @return
*/
public static String encry_RC4_string(String data, String key) {
if (data == null || key == null) {
return null;
}
return toHexString(asString(encry_RC4_byte(data, key)));
}
private static String asString(byte[] buf) {
StringBuffer strbuf = new StringBuffer(buf.length);
for (int i = 0; i < buf.length; i++) {
strbuf.append((char) buf[i]);
}
return strbuf.toString();
}
private static byte[] initKey(String aKey) {
byte[] b_key = aKey.getBytes();
byte state[] = new byte[256];
for (int i = 0; i < 256; i++) {
state[i] = (byte) i;
}
int index1 = 0;
int index2 = 0;
if (b_key == null || b_key.length == 0) {
return null;
}
for (int i = 0; i < 256; i++) {
index2 = ((b_key[index1] & 0xff) + (state[i] & 0xff) + index2) & 0xff;
byte tmp = state[i];
state[i] = state[index2];
state[index2] = tmp;
index1 = (index1 + 1) % b_key.length;
}
return state;
}
private static String toHexString(String s) {
String str = "";
for (int i = 0; i < s.length(); i++) {
int ch = (int) s.charAt(i);
String s4 = Integer.toHexString(ch & 0xFF);
if (s4.length() == 1) {
s4 = '0' + s4;
}
str = str + s4;
}
return str;// 0x表示十六进制
}
private static byte[] HexString2Bytes(String src) {
int size = src.length();
byte[] ret = new byte[size / 2];
byte[] tmp = src.getBytes();
for (int i = 0; i < size / 2; i++) {
ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
}
return ret;
}
private static byte uniteBytes(byte src0, byte src1) {
char _b0 = (char) Byte.decode("0x" + new String(new byte[] { src0 })).byteValue();
_b0 = (char) (_b0 << 4);
char _b1 = (char) Byte.decode("0x" + new String(new byte[] { src1 })).byteValue();
byte ret = (byte) (_b0 ^ _b1);
return ret;
}
private static byte[] RC4Base(byte[] input, String mKkey) {
int x = 0;
int y = 0;
byte key[] = initKey(mKkey);
int xorIndex;
byte[] result = new byte[input.length];
for (int i = 0; i < input.length; i++) {
x = (x + 1) & 0xff;
y = ((key[x] & 0xff) + y) & 0xff;
byte tmp = key[x];
key[x] = key[y];
key[y] = tmp;
xorIndex = ((key[x] & 0xff) + (key[y] & 0xff)) & 0xff;
result[i] = (byte) (input[i] ^ key[xorIndex]);
}
return result;
}
public static void main(String[] args) {
String newId = decry_RC4("cd1086ac0fd86b3e6075efe6bf361fd6f969cff8d7fa5e517a", "hzlqwazuan");
System.out.println(newId);
String parms[] = newId.split("\\|");
System.out.println(parms[0]);
System.out.println(parms[1]);
System.out.println(parms[2]);
}
}
*
* 项目名称:
* 类名称:RC4Util
* 类描述:RC4加解密
* 创建人:
* 创建时间:
* 修改人:
* 修改时间:
* 修改备注:
*
* @version V1.0
*
*/
package util;
public class RC4Util {
/**
* 字节数组rc4解密成字符串
*
* @param data 字节数组
* @param key
* @return
*/
public static String decry_RC4(byte[] data, String key) {
if (data == null || key == null) {
return null;
}
return asString(RC4Base(data, key));
}
/**
* 字符串rc4解密成字符串
*
* @param data
* @param key
* @return
*/
public static String decry_RC4(String data, String key) {
if (data == null || key == null) {
return null;
}
return new String(RC4Base(HexString2Bytes(data), key));
}
/**
* 字符串rc4加密成字节数组
*
* @param data
* @param key
* @return
*/
public static byte[] encry_RC4_byte(String data, String key) {
if (data == null || key == null) {
return null;
}
byte b_data[] = data.getBytes();
return RC4Base(b_data, key);
}
/**
* 字符串rc4加密成字符串
*
* @param data
* @param key
* @return
*/
public static String encry_RC4_string(String data, String key) {
if (data == null || key == null) {
return null;
}
return toHexString(asString(encry_RC4_byte(data, key)));
}
private static String asString(byte[] buf) {
StringBuffer strbuf = new StringBuffer(buf.length);
for (int i = 0; i < buf.length; i++) {
strbuf.append((char) buf[i]);
}
return strbuf.toString();
}
private static byte[] initKey(String aKey) {
byte[] b_key = aKey.getBytes();
byte state[] = new byte[256];
for (int i = 0; i < 256; i++) {
state[i] = (byte) i;
}
int index1 = 0;
int index2 = 0;
if (b_key == null || b_key.length == 0) {
return null;
}
for (int i = 0; i < 256; i++) {
index2 = ((b_key[index1] & 0xff) + (state[i] & 0xff) + index2) & 0xff;
byte tmp = state[i];
state[i] = state[index2];
state[index2] = tmp;
index1 = (index1 + 1) % b_key.length;
}
return state;
}
private static String toHexString(String s) {
String str = "";
for (int i = 0; i < s.length(); i++) {
int ch = (int) s.charAt(i);
String s4 = Integer.toHexString(ch & 0xFF);
if (s4.length() == 1) {
s4 = '0' + s4;
}
str = str + s4;
}
return str;// 0x表示十六进制
}
private static byte[] HexString2Bytes(String src) {
int size = src.length();
byte[] ret = new byte[size / 2];
byte[] tmp = src.getBytes();
for (int i = 0; i < size / 2; i++) {
ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
}
return ret;
}
private static byte uniteBytes(byte src0, byte src1) {
char _b0 = (char) Byte.decode("0x" + new String(new byte[] { src0 })).byteValue();
_b0 = (char) (_b0 << 4);
char _b1 = (char) Byte.decode("0x" + new String(new byte[] { src1 })).byteValue();
byte ret = (byte) (_b0 ^ _b1);
return ret;
}
private static byte[] RC4Base(byte[] input, String mKkey) {
int x = 0;
int y = 0;
byte key[] = initKey(mKkey);
int xorIndex;
byte[] result = new byte[input.length];
for (int i = 0; i < input.length; i++) {
x = (x + 1) & 0xff;
y = ((key[x] & 0xff) + y) & 0xff;
byte tmp = key[x];
key[x] = key[y];
key[y] = tmp;
xorIndex = ((key[x] & 0xff) + (key[y] & 0xff)) & 0xff;
result[i] = (byte) (input[i] ^ key[xorIndex]);
}
return result;
}
public static void main(String[] args) {
String newId = decry_RC4("cd1086ac0fd86b3e6075efe6bf361fd6f969cff8d7fa5e517a", "hzlqwazuan");
System.out.println(newId);
String parms[] = newId.split("\\|");
System.out.println(parms[0]);
System.out.println(parms[1]);
System.out.println(parms[2]);
}
}
发表评论
-
用java代码发送邮件(优化版)
2017-02-28 10:10 708调用代码如下: if(!StringUtil.isNull ... -
java读取配置文件信息
2017-01-06 16:18 10841、先引包 import java.io.Buffered ... -
生产随机字符串
2016-12-26 10:05 780根据自己的需求生成随机位数的字符串,如:复杂度为中以上的8位随 ... -
java数字转汉语读法
2015-08-28 10:22 847看到好的东西就想收藏一份,说不定自己哪天就用的上了。 ... -
java正则验证数字、邮箱格式、字符串
2015-08-28 10:00 2315用java代码正则验证数字、邮箱格式、字符串的一些工具类方法 ... -
一个简易的线程池示例
2015-08-07 17:39 511package thread.pool; impor ... -
Thread里面使用@resource失败,对象为null
2015-07-02 15:10 4589spring 在Thread中注入@Resource失败,总为 ... -
用java代码发送邮件 附件
2015-06-29 18:30 4243PS:3种示例的代码都在附件压缩包里,每个包一种示例,独立运行 ... -
页面添加验证码
2015-04-24 18:38 681先上图 我的这种方式由3部分代码组成:页面(html+j ... -
查看class文件是被jdk什么版本编译的
2015-04-24 18:24 1098package image; import java ... -
maven+springMVC+mybatis+junit详细搭建过程
2015-02-28 16:16 877springMVC+mybatis框架搭建 首先我们先要弄清搭 ... -
Base64编码解码
2015-02-27 16:53 599package util; import java. ... -
手机号码相关匹配,判断是否手机号码,属于哪个运营商1移动2联通3电信
2015-02-26 09:05 1805package com.hzlq.yyffserver.uti ... -
完成对json数据的解析
2015-02-26 09:05 571package util; import java.util ... -
数字格式+计算工具类
2015-02-26 09:05 705package util; import java.math ... -
DES加密解密
2015-02-26 09:06 550package util; import it.sauron ... -
字符串和xml互转工具类
2015-02-26 09:05 1157package util; import java.io.B ... -
java date工具类
2015-02-25 14:39 1337package util; import java.text ... -
读取配置文件工具类
2015-02-25 14:35 759package util; import java.util ... -
java String工具类
2015-02-25 14:28 1111package util; import java.text ...
相关推荐
"java实现的RC4加密解密算法示例" RC4加密解密算法是Symmetric-key block cipher的一种,使用同一个密钥进行加密和解密。java实现的RC4加密解密算法可以通过以下步骤实现: 1. 初始化数组:创建一个大小为256的...
RC4加解密是易语言环境中实现RC4算法的程序代码,用于对数据进行加密和解密操作,确保信息安全。 RC4算法的工作原理: 1. 密钥扩展:RC4算法首先通过一个密钥(通常为字节序列)生成一个长度为256的密钥流,这个...
纯python实现的RC4加解密,不依赖任何第三方库,兼容python2和python3,支持中文加解密
在C#编程环境中,RC4被用于数据的加密和解密,尤其是在.NET框架下,它提供了一种简单且高效的方式来保护敏感信息。本文将深入探讨C#中RC4加密解密的原理、实现方式以及如何使用提供的工具。 RC4算法基于一个称为...
在给定的程序"RC4En-Decrypt.exe"和源代码文件"RC4En-Decrypt.cpp"中,我们可以预期开发者实现了一个简单的命令行工具,允许用户对文件进行RC4加解密操作。用户可能需要提供一个密钥,该密钥用于生成RC4的密钥流。...
在这个名为"易语言源码易语言RC4加解密源码.rar"的压缩包中,我们很显然会找到使用易语言实现的RC4加解密算法的源代码。 RC4算法的基本原理是通过一个称为“密钥流生成器”(Key Stream Generator)的过程,生成一...
RC4加解密算法的例程,用vs2005 C#实现,代码中有部分注释,外部有操作文档,唯一的不足是工程文件命名为RSA,但该例程实现的的确是RC4算法!-RC4 encryption algorithm routines, using vs2005 C# Realize, the ...
一个操作简单,代码注释移动的rc4加解密算法的C++实现,你只需要输入要加密数据的文件路径,就会自动生成加密或解密之后的文件。 我想重要的是这段程序可以很好的修改和移植,只需要看懂清晰的注释就能把模块进行...
经典的RC4加密解密,加密解密是相同的,再次加密既解密
使用RC4加密算法对文件进行加密或者解密,C语言实现
在易语言中实现RC4加密解密,可以帮助开发者保护数据安全,防止信息被未经授权的用户访问。 首先,我们需要了解RC4算法的基本原理。RC4算法基于一个名为“密钥流生成器”(Key Stream Generator, KSA)和“伪随机...
易语言RC4加密解密是针对易语言编程环境中实现的一种数据加密与解密技术,主要应用于保护敏感信息的安全。RC4是一种流密码算法,由Ron Rivest在1987年设计,因其简单且快速的特性,被广泛用于网络通信和软件安全。...
"RC4加解密.rar"可能包含的是易语言编写的RC4加密和解密的源代码示例。易语言是中国本土的一种编程语言,以其简单直观的语法而著称,特别适合初学者学习。 RC4算法的核心是通过一个名为“状态”的256字节的数组和两...
*网上很多RC4算法在用的时候,都会出现「加密然后立即在内存中解密」可以,但先把加密后的密文写入文件再读取解密就失败的情况。这段代码没有这种情况。 *采用了重载函数,我用了String加密解密,成功。
在MFC程序中,这两个步骤会被封装在相应的函数里,如`InitRC4()`用于设置密钥,并初始化状态数组,`RC4ProcessData()`则用于执行实际的加密和解密操作。 在描述中提到的“加密后的乱码转16进制”,这是指加密后得到...
这些源代码提供了学习和研究RC4算法的良好实例,对于理解RC4的工作机制和加密解密过程非常有帮助。无论你是想了解RC4算法本身,还是希望在特定的编程环境中使用RC4,都可以从这些源代码中找到参考和启示。同时,这也...
### RC4加密解密算法详解 #### 一、引言 RC4(Rivest Cipher 4)是一种流加密算法,由RSA数据安全公司的Ron Rivest于1987年设计。RC4算法因其简单高效的特点,在过去广泛应用于各种安全通信场景中,包括但不限于...
并且密钥长度是可变的,可变范围为1-256字节(8-2048比特),在现在技术支持的前提下,当密钥长度为128比特时,用暴力法搜索密钥已经不太可行,所以能够预见RC4的密钥范围任然能够在今后相当长的时间里抵御暴力搜索...
`RC4加解密.exe`是编译后的可执行程序,可以直接用于对文件进行RC4加密和解密操作。用户可能需要输入待处理文件的路径,以及密钥信息,然后程序将读取文件内容,执行RC4加解密,并将结果保存到新的文件中。 需要...