最近研究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。的更多相关文章

  1. lua rc4算法实现

    由于项目需要,用python django写restful接口遇到瓶颈,python django+uwsgi处理请求是会阻塞的, 如果阻塞请求不及时处理,会卡住越来越多的其它的请求,导致越来越多的5 ...

  2. WebSphere禁用SSLv3和RC4算法教程

    WebSphere经常会报“SSL 3.0 POODLE攻击信息泄露”和"SSL/TLS 受诫礼(BAR-MITZVAH)攻击"两个漏洞,前者建议禁用SSL算法后者建议禁用RC4算 ...

  3. (转)WebSphere禁用SSLv3和RC4算法教程

    原文:https://www.cnblogs.com/lsdb/p/7126399.html WebSphere经常会报“SSL 3.0 POODLE攻击信息泄露”和"SSL/TLS 受诫礼 ...

  4. RC4算法的Python实现详注

    刚对RC4算法进行了学习,网上发现https://ju.outofmemory.cn/entry/46753 中作者展示了RC4的python实现,但代码缺乏注释,较为晦涩,因此本文对部分代码进行了注 ...

  5. c# rc4算法,加密解密类

    rc4算法,原理,以密匙生成256位的密匙流,然后以车轮式滚过源数据异或加密. /* * 由SharpDevelop创建. * 用户: YISH * 日期: 04/04/2015 * 时间: 03:0 ...

  6. RC4算法

    RC4算法简介:https://baike.baidu.com/item/RC4%E7%AE%97%E6%B3%95/9686396?fr=aladdin RC4算法java实现: /** * RC4 ...

  7. 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 ...

  8. Tomcat禁用SSLv3和RC4算法

    1.禁用SSLv3(SSL 3.0 POODLE攻击信息泄露漏洞(CVE-2014-3566)[原理扫描]) 编缉$CATALINA_HOEM/conf/server.xml配置文件,找到https端 ...

  9. _00013 一致性哈希算法 Consistent Hashing 新的讨论,并出现相应的解决

    笔者博文:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前.妳却感觉不到我的存在 技术方向: ...

随机推荐

  1. 单点登录cas常见问题(十四) - ST和TGT的过期策略是什么?

    ST和TGT的过期策略能够參看配置文件:ticketExpirationPolicies.xml 1.先说ST:ST的过期包含使用次数和时间,默认使用一次就过期,或者即使没有使用.一段时间后也要过期 ...

  2. 使用boost::multi_index高速构建排行榜

    使用boost::multi_index高速构建排行榜 前几天在boost的maillist上看到boost::multi_index将要支持ranked_index(邮件内容见附件2),这实乃我等苦 ...

  3. poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)

    题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...

  4. 【博客目录】SqlServer篇

    SqlServer系列篇   [SqlServer系列]SQLSERVER安装教程     [SqlServer系列]数据库三大范式     [SqlServer系列]表单查询     [SqlSer ...

  5. 在java项目中加入百度富文本编辑器

    富文本编辑器在项目中很常见,他可以将文本,图片等信息存入数据库,在编辑一些图文混排的信息的时候很有用,比如商城项目的商品详情页,包含很多带有样式的文字和图片. 此前一直使用的百度的富文本编辑器uedi ...

  6. 自学Zabbix3.2-配置功能简介

    zabbix配置功能介绍 zabbix配置内容比较多,我们要分为9大块来讲解.分别如下: 1. 主机与组        添加主机配置与组配置. 1.1.创建主机方法 1.1.1 新建主机      c ...

  7. 我在Windows下的第一个Shellcode

    纪念我的第一个Shellcode(XP SP3, VC6): 1.获取MessageBoxA(ASCII)的静态地址 2.编写汇编代码调试,获取对应的机器码(注意字符串由栈顶向栈底生长,push由栈底 ...

  8. 「mysql优化专题」优化之路高级进阶——表的设计及优化(6)

    正文:表的设计及优化(真技术文) 优化①:创建规范化表,消除数据冗余 数据库范式是确保数据库结构合理,满足各种查询需要.避免数据库操作异常的数据库设计方式.满足范式要求的表,称为规范化表,范式产生于2 ...

  9. mysql版本升级

    环境 mysql安装在centos上,需要升级. mysql的版本是 mysql> select version(); +-----------+ | version() | +-------- ...

  10. C#创建对象时各种初始化属性、字段的方式的执行顺序

    创建对象代码如下: new FilterInfo(Student.CreateTimeProperty,"朱七",Express.Equals,Relationship.Or) { ...