/**
* RC4加密解密工具类
*
* @author hesongjun
*
*/
public class RC4Util {
/**
* 解密文件中的内容
*
* @param filePath 需要解密的文件路径
* @param key 解密的key
*
* @return 解密后的内容
* */
public static String decodeStrFromFile(String filePath, String key) {
String encodeContent = readFile(filePath);
String decodeContent = rc4(encodeContent,key);
return decodeContent;
}
/**
* 解密内容
*
* @param content 需要解密的内容
* @param key 解密的key,为数字或者字母
*
* @return 解密后的内容
* */
public static String decodeStr(String content, String key) {
String decodeContent = rc4(content,key);
return decodeContent;
}
/**
* 加密内容至文件
*
* @param content 需要加密的内容
* @param filePath 内容加密后保存的文件路径
* @param key 加密的key
*
* @return 是否加密成功
* */
public static boolean encodeStrToFile(String content, String filePath, String key) {
String encodeContent = rc4(content,key);
boolean result =saveFile(encodeContent, filePath);
return result;
}
/**
* 加密内容
*
* @param content 需要加密的内容
* @param key 加密的key
*
* @return 加密后的内容
* */
public static String encodeStr(String content, String key) {
String encodeContent = rc4(content,key);
return encodeContent;
}
//加密解密都用同一个方法
private static String rc4(String aInput,String key) {
int[] iS = new int[256];
byte[] iK = new byte[256];
for (int i = 0; i < 256; i++){
iS[i] = i;
}
int j = 1;
for (short i = 0; i < 256; i++) {
iK[i] = (byte) key.charAt((i % key.length()));
}
j = 0;
for (int i = 0; i < 255; i++) {
j = (j + iS[i] + iK[i]) % 256;
int temp = iS[i];
iS[i] = iS[j];
iS[j] = temp;
}
int i = 0;
j = 0;
char[] iInputChar = aInput.toCharArray();
char[] iOutputChar = new char[iInputChar.length];
for (short x = 0; x < iInputChar.length; x++) {
i = (i + 1) % 256;
j = (j + iS[i]) % 256;
int temp = iS[i];
iS[i] = iS[j];
iS[j] = temp;
int t = (iS[i] + (iS[j] % 256)) % 256;
int iY = iS[t];
char iCY = (char) iY;
iOutputChar[x] = (char) (iInputChar[x] ^ iCY);
}
return new String(iOutputChar);
}
/** 读取 */
private static String readFile(String filePath) {
String res = "";
if (!new File(filePath).exists()) {
return res;
}
String resStr = "";
try {
byte buf[] = new byte[1024];
FileInputStream input = new FileInputStream(filePath);
int count = input.read(buf);
input.close();
return new String(buf, 0, count);
} catch (Exception e) {
e.printStackTrace();
}
return resStr;
}
/** 写入 */
private static boolean saveFile(String content, String filePath) {
try {
File file = new File(filePath);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if (!file.getParentFile().exists()) {
return false;
}
if (!new File(filePath).exists()) {
file.createNewFile();
}
FileOutputStream outStream = new FileOutputStream(file);
String utf8Str = new String(content.getBytes("UTF-8"), "UTF-8");
outStream.write(utf8Str.getBytes());
outStream.flush();
outStream.getFD().sync();
outStream.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
RC4加密解密算法
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密...
- 本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工...
- 为了保证网络传输数据的安全性,涉及敏感数据的传输,最好对数据预先加密,然后再在网络上进行传输,同时,还要保证数据在...
- 非对称加密算法是一种基于密钥的保密方法,需要公开密钥和私有密钥,在文件加密、尤其是网银中应用广泛。 DH密钥交换算...