对RC4算法进行改写,新的加密算法RCX。
最近研究JWT算法, JWT由header、payload、signature三个部分组成,payload是非加密的,一些敏感信息能被别人非法获得,必要时候要加密。
加密算法中,RC4算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。由于RC4算法加密是采用的xor,所以,一旦子密钥序列出现了重复,密文就有可能被破解。而jwt的payload是json格式,所以容易被破解。
经过几天对RC4算法研究,终于写成性能不错的算法,趁IPHONE X的热,就叫RCX算法。
加密例子:
密钥(secret key):ToolGood 输出数据类型(output data type):Base64_Url
RC4('ABCDDDDDDDDDDDDDDDDDDDDDD') => O8AF0I3sAzyQaTO78S9irZwDfemUR4eGsw
RC4('ACBDDDDDDDDDDDDDDDDDDDDDD') => O8EE0I3sAzyQaTO78S9irZwDfemUR4eGsw
RC4('CBADDDDDDDDDDDDDDDDDDDDDD') => OcAH0I3sAzyQaTO78S9irZwDfemUR4eGsw
RC4('1234567891234567891234567') => S7B1oPyecEDtHEXMgV4Q3uB-CJ_jN_b0wA
RC4('1234567800034567891234567') => S7B1oPyecEDkHUfMgV4Q3uB-CJ_jN_b0wA
RCX('ABCDDDDDDDDDDDDDDDDDDDDDD') => O3priO83Pd4e-7IeTBJmrIax7kmO5yzr2Q
RCX('ACBDDDDDDDDDDDDDDDDDDDDDD') => O3s81pEyp9daRW9yHYC4ynIOalk8FYSI9g
RCX('CBADDDDDDDDDDDDDDDDDDDDDD') => OXpp1Sm4eyyhg5MQGWrjGa6w2MZhoK09Kw
RCX('1234567891234567891234567') => SwoWZFa8uiJnqv_arFs0WVHOfYRvMGTsAw
RCX('1234567800034567891234567') => SwoWZFa8uiJuQXjGVkKaspQseRHK9qtVZA
从上面的代码,可以明显看出RC4算法的缺点,数据经过RCX算法加密后变得无序。
RCX的算法如下:
public class RCX
{
private const int keyLen = 256; /// <summary>
/// Encrypt
/// </summary>
/// <param name="data"></param>
/// <param name="pass"></param>
/// <returns></returns>
public static byte[] Encrypt(byte[] data, byte[] pass)
{
if (data == null) throw new ArgumentNullException("data");
if (pass == null) throw new ArgumentNullException("pass"); byte[] mBox = GetKey(pass, keyLen);
byte[] output = new byte[data.Length];
int i = 0, j = 0;
for (int offset = 0; offset < data.Length; offset++) {
i = (++i) & 0xFF;
j = (j + mBox[i]) & 0xFF; byte a = data[offset];
byte c = (byte)(a ^ mBox[(mBox[i] + mBox[j]) & 0xFF]);
output[offset] = c; byte temp2 = mBox[c];
mBox[c] = mBox[a];
mBox[a] = temp2;
j = (j + a + c);
}
return output;
} /// <summary>
/// Encrypt
/// </summary>
/// <param name="data"></param>
/// <param name="pass"></param>
/// <returns></returns>
public static byte[] Encrypt(byte[] data, string pass)
{
if (data == null) throw new ArgumentNullException("data");
if (pass == null) throw new ArgumentNullException("pass"); return Encrypt(data, Encoding.Unicode.GetBytes(pass));
} private static byte[] GetKey(byte[] pass, int kLen)
{
byte[] mBox = new byte[kLen];
for (Int64 i = 0; i < kLen; i++) {
mBox[i] = (byte)i;
}
Int64 j = 0;
for (Int64 i = 0; i < kLen; i++) {
j = (j + mBox[i] + pass[i % pass.Length]) % kLen;
byte temp = mBox[i];
mBox[i] = mBox[j];
mBox[j] = temp;
}
return mBox;
}
}
代码分析:
RC4采用 i 与 j 对密码盘进行调换。
RCX采用[明文]与[密文]进行调换,并且对 j 进行修改。
性能:
密钥(secret key):ToolGood
数据长度(data length):10000
加密次数(encryption count):1000
RC4 => 150ms
RCX => 255ms
原代码:https://github.com/toolgood/RCX
对RC4算法进行改写,新的加密算法RCX。的更多相关文章
- lua rc4算法实现
由于项目需要,用python django写restful接口遇到瓶颈,python django+uwsgi处理请求是会阻塞的, 如果阻塞请求不及时处理,会卡住越来越多的其它的请求,导致越来越多的5 ...
- WebSphere禁用SSLv3和RC4算法教程
WebSphere经常会报“SSL 3.0 POODLE攻击信息泄露”和"SSL/TLS 受诫礼(BAR-MITZVAH)攻击"两个漏洞,前者建议禁用SSL算法后者建议禁用RC4算 ...
- (转)WebSphere禁用SSLv3和RC4算法教程
原文:https://www.cnblogs.com/lsdb/p/7126399.html WebSphere经常会报“SSL 3.0 POODLE攻击信息泄露”和"SSL/TLS 受诫礼 ...
- RC4算法的Python实现详注
刚对RC4算法进行了学习,网上发现https://ju.outofmemory.cn/entry/46753 中作者展示了RC4的python实现,但代码缺乏注释,较为晦涩,因此本文对部分代码进行了注 ...
- c# rc4算法,加密解密类
rc4算法,原理,以密匙生成256位的密匙流,然后以车轮式滚过源数据异或加密. /* * 由SharpDevelop创建. * 用户: YISH * 日期: 04/04/2015 * 时间: 03:0 ...
- RC4算法
RC4算法简介:https://baike.baidu.com/item/RC4%E7%AE%97%E6%B3%95/9686396?fr=aladdin RC4算法java实现: /** * RC4 ...
- cb41a_c++_STL_算法_填充新值fill_generate
cb41a_c++_STL_算法_填充新值fill_generatefill(b,e,v)fill_n(b,n,v),填充n个vgenerate(b,e,p)generate_n(b,n,p) gen ...
- Tomcat禁用SSLv3和RC4算法
1.禁用SSLv3(SSL 3.0 POODLE攻击信息泄露漏洞(CVE-2014-3566)[原理扫描]) 编缉$CATALINA_HOEM/conf/server.xml配置文件,找到https端 ...
- _00013 一致性哈希算法 Consistent Hashing 新的讨论,并出现相应的解决
笔者博文:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前.妳却感觉不到我的存在 技术方向: ...
随机推荐
- JAVA-----基于POI实现对Excel导入
在日常项目开发中, 数据录入和导出是十分普遍的需求,因此,导入导出也成为了开发中一个经典的功能.数据导出的格式一般是excel或者pdf,而批量导入的信息一般是借助excel来减轻工作量,提高效率. ...
- UVA 10465 Homer Simpson(全然背包: 二维目标条件)
UVA 10465 Homer Simpson(全然背包: 二维目标条件) http://uva.onlinejudge.org/index.php? option=com_onlinejudge&a ...
- 一行代码巧妙实现iOS返回button
一行代码巧妙实现iOS返回button: self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[ ...
- 学习Spring必学的Java基础知识(1)----反射(转)
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...
- (转)spring aop
工作忙,时间紧,不过事情再多,学习是必须的.记得以前的部门老大说过:“开发人员不可能一天到晚只有工作,肯定是需要自我学习.第一:为了更充实自己,保持进步状态.第二:为了提升技术,提高开发能力.第三:保 ...
- MyBatis 批量操作、集合遍历-foreach
在使用mybatis操作数据库时,经常会使用到批量插入.IN条件查询的情况,这时就难免要使用到foreach元素.下面一段话摘自mybatis官网: foreach 元素的功能是非常强大的,它允许你指 ...
- 6.python内置函数
1. abs() 获取绝对值 >>> abs(-10) 10 >>> a = -10 >>> a.__abs__() 10 2. all() ...
- 【HTML】HTML基础知识
<!DOCTYPE html>表示HTML5文档申明,不区别大小写,通常这么写. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 ...
- 【python】lambda创建匿名函数
- jquery如此强大,为什么还要写原生呢?
这是一个伪标题,其实是一篇年终总结. 在这家公司一年多,蛮多收获的.大部分来自自己,小部分来自公司. 做前端开发到现在,我觉得可以分为两部分. 前半部分做项目用原生js,jquery以及各种基于jq的 ...