`
菜鸟级JAVA
  • 浏览: 96739 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

RC4加解密

 
阅读更多
/**
*
* 项目名称:
* 类名称: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实现的RC4加密解密算法示例

    "java实现的RC4加密解密算法示例" RC4加密解密算法是Symmetric-key block cipher的一种,使用同一个密钥进行加密和解密。java实现的RC4加密解密算法可以通过以下步骤实现: 1. 初始化数组:创建一个大小为256的...

    易语言RC4加解密

    RC4加解密是易语言环境中实现RC4算法的程序代码,用于对数据进行加密和解密操作,确保信息安全。 RC4算法的工作原理: 1. 密钥扩展:RC4算法首先通过一个密钥(通常为字节序列)生成一个长度为256的密钥流,这个...

    纯python实现的RC4加解密

    纯python实现的RC4加解密,不依赖任何第三方库,兼容python2和python3,支持中文加解密

    【原创】C# RC4 加密解密工具

    在C#编程环境中,RC4被用于数据的加密和解密,尤其是在.NET框架下,它提供了一种简单且高效的方式来保护敏感信息。本文将深入探讨C#中RC4加密解密的原理、实现方式以及如何使用提供的工具。 RC4算法基于一个称为...

    简单的RC4加解密程序

    在给定的程序"RC4En-Decrypt.exe"和源代码文件"RC4En-Decrypt.cpp"中,我们可以预期开发者实现了一个简单的命令行工具,允许用户对文件进行RC4加解密操作。用户可能需要提供一个密钥,该密钥用于生成RC4的密钥流。...

    易语言源码易语言RC4加解密源码.rar

    在这个名为"易语言源码易语言RC4加解密源码.rar"的压缩包中,我们很显然会找到使用易语言实现的RC4加解密算法的源代码。 RC4算法的基本原理是通过一个称为“密钥流生成器”(Key Stream Generator)的过程,生成一...

    rc4加解密算法

    RC4加解密算法的例程,用vs2005 C#实现,代码中有部分注释,外部有操作文档,唯一的不足是工程文件命名为RSA,但该例程实现的的确是RC4算法!-RC4 encryption algorithm routines, using vs2005 C# Realize, the ...

    rc4加解密算法.cpp

    一个操作简单,代码注释移动的rc4加解密算法的C++实现,你只需要输入要加密数据的文件路径,就会自动生成加密或解密之后的文件。 我想重要的是这段程序可以很好的修改和移植,只需要看懂清晰的注释就能把模块进行...

    RC4加密解密

    经典的RC4加密解密,加密解密是相同的,再次加密既解密

    RC4加解密 C语言实现

    使用RC4加密算法对文件进行加密或者解密,C语言实现

    易语言RC4加密解密源码

    在易语言中实现RC4加密解密,可以帮助开发者保护数据安全,防止信息被未经授权的用户访问。 首先,我们需要了解RC4算法的基本原理。RC4算法基于一个名为“密钥流生成器”(Key Stream Generator, KSA)和“伪随机...

    易语言RC4加密解密

    易语言RC4加密解密是针对易语言编程环境中实现的一种数据加密与解密技术,主要应用于保护敏感信息的安全。RC4是一种流密码算法,由Ron Rivest在1987年设计,因其简单且快速的特性,被广泛用于网络通信和软件安全。...

    RC4加解密.rar

    "RC4加解密.rar"可能包含的是易语言编写的RC4加密和解密的源代码示例。易语言是中国本土的一种编程语言,以其简单直观的语法而著称,特别适合初学者学习。 RC4算法的核心是通过一个名为“状态”的256字节的数组和两...

    RC4加密解密算法的Java实现

    *网上很多RC4算法在用的时候,都会出现「加密然后立即在内存中解密」可以,但先把加密后的密文写入文件再读取解密就失败的情况。这段代码没有这种情况。 *采用了重载函数,我用了String加密解密,成功。

    RC4加密解密的MFC小程序源码

    在MFC程序中,这两个步骤会被封装在相应的函数里,如`InitRC4()`用于设置密钥,并初始化状态数组,`RC4ProcessData()`则用于执行实际的加密和解密操作。 在描述中提到的“加密后的乱码转16进制”,这是指加密后得到...

    本人根据RC4加密解密算法原理自己实现的RC4加密解密程序_RC4加密解密_信息安全_加密解密_密码学

    这些源代码提供了学习和研究RC4算法的良好实例,对于理解RC4的工作机制和加密解密过程非常有帮助。无论你是想了解RC4算法本身,还是希望在特定的编程环境中使用RC4,都可以从这些源代码中找到参考和启示。同时,这也...

    RC4 加密解密算法

    ### RC4加密解密算法详解 #### 一、引言 RC4(Rivest Cipher 4)是一种流加密算法,由RSA数据安全公司的Ron Rivest于1987年设计。RC4算法因其简单高效的特点,在过去广泛应用于各种安全通信场景中,包括但不限于...

    RC4加密解密工具

    并且密钥长度是可变的,可变范围为1-256字节(8-2048比特),在现在技术支持的前提下,当密钥长度为128比特时,用暴力法搜索密钥已经不太可行,所以能够预见RC4的密钥范围任然能够在今后相当长的时间里抵御暴力搜索...

    RC4加解密_RC4加解密_

    `RC4加解密.exe`是编译后的可执行程序,可以直接用于对文件进行RC4加密和解密操作。用户可能需要输入待处理文件的路径,以及密钥信息,然后程序将读取文件内容,执行RC4加解密,并将结果保存到新的文件中。 需要...

Global site tag (gtag.js) - Google Analytics