erlang的token值加解密
对于加解密,需客户端和服务器制定好对应的规则(如:加密算法(aes,des等)、加密模式(cbc,cfb)),去加密,再按逆序列解密。这里的key是根据数字、大小写字母、符合组合的,每次请求获取一个动态key,暂且叫做”一次一密钥“;
而也可以设计为:前后端一开始定义好一个固定key,这样好处是:就不需获取随机key,也不需要在最后把加密内容和Key穿插起来发送,只需给需加密的内容加密即可。
但这样的坏处是:如果拿到固定的key,就可以模拟前端报文连续给server端发消息,key的级别不强;而每次随机获取key相对就好了很多。
下面附erlang做客户端加密部分代码及服务端解密部分代码:
-module(cc). -compile(export_all). -define(TOKEN_IVEC, <<"Egl63xPQYEcIY0RJ">>). %%client加密部分
aes_encode() ->
Time = list_to_binary(integer_to_list(unixtime1()) ++"000" ),
io:format("Time...client...~p~n",[Time]),
Key = list_to_binary(random()),
io:format("Key...client...~p~n",[Key]),
AES = crypto:aes_cbc_128_encrypt(Key, ?TOKEN_IVEC, Time),
Text = base64:encode(AES),
Text1 = binary_to_list(Text),
End = foldl(lists:sublist(Text1,1,16),binary_to_list(Key)) ++ lists:sublist(Text1,17,8),
End. %随机生成16位Key值
random() ->
Str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_",
%%一次随机取多个,再分别取出对应值
N = [random:uniform(length(Str)) || _Elem <- lists:seq(1,16)],
RandomKey = [lists:nth(X,Str) || X<- N ],
RandomKey. unixtime1() ->
{MegaSecs, Secs, _MicroSecs} = erlang:now(),
MegaSecs * 1000000000 + Secs * 100000 . foldl(A, B) ->
foldl(A, B, []).
foldl([H|T], [H1|T1], Acc) ->
foldl(T, T1, Acc++[H|[H1]]);
foldl([], [], Acc) ->
Acc. %%server解密部分
verify_token( Token ) ->
case Token of
"" ->
{error, "token error"};
TokenStr ->
{CryptoStr, Key} = verify_token_scan(TokenStr, <<>>, <<>>, 16),
io:format("Key...server...~p~n",[Key]),
Cipher = base64:decode(CryptoStr),
TimestampStr = binary_to_list(crypto:aes_cbc_128_decrypt(Key, ?TOKEN_IVEC, Cipher)),
Timestamp = list_to_integer(lists:sublist(TimestampStr, 13)), io:format("Timestamp ...server...~p~n",[Timestamp]),
Now = now_time(),
if
Timestamp > (Now - 691200) * 1000 ->
ok;
true ->
{error, "1token error"}
end
end. now_time() ->
{X, Y, _} = now(),
X * 1000000 + Y. verify_token_scan(TokenStr, CryptoStr, Key, 0) ->
{iolist_to_binary([CryptoStr, TokenStr]), Key};
verify_token_scan([C, K|TokenStr], CryptoStr, Key, KeyLength) ->
verify_token_scan(TokenStr, <<CryptoStr/binary, C>>, <<Key/binary, K>>, KeyLength - 1);
verify_token_scan([], CryptoStr, Key, _KeyLength) ->
{CryptoStr, Key}.
运行结果如下:
涉及了随机数的取法,加解密及base64转码以及反序列化的解密等东西.
YEM_8BDAGRKK.jpg)
erlang的token值加解密的更多相关文章
- 一个密码经过多次MD5加密能否提高安全性?Java MD5盐值加解密
什么是MD5? MD5(Message Digest Algorithm 5,信息摘要算法5),是计算机广泛使用的摘要算法(又称哈希算法)之一.MD5是将一段信息,通过其不可逆的字符串变换算法,产生了 ...
- java和erlang之间的DES加解密
app登录,登录的密码要用DES加密,服务器是用erlang,客户端要同时支持多平台(Android.iOS).首先,Java端的DES加密的实现方式, 少说废话了,直接上代码,如下: public ...
- springboot-jjwt HS256加解密(PS:验证就是解密)
最近项目需要用到类似access token进行加解密.验签的需求,本人在此做个小笔记记录一下,以供他人参考. 一共会用到2中加解密,HS256 和 RS256,本文只是对 HS256做个备注,好了直 ...
- SpringBoot+ShardingSphere彻底解决生产环境数据库字段加解密问题
前言 互联网行业公司,对于数据库的敏感字段是一定要进行加密的,方案有很多,最直接的比如写个加解密的工具类,然后在每个业务逻辑中手动处理,在稍微有点规模的项目中这种方式显然是不现实的,不仅工作量大而 ...
- js javascript 简易随机值穿插加解密【原】
适用场景 本方法适用于需要对敏感信息进行加密传输,但加解密要求又不高的场景,因为是前台的javascript加解密,所以其实还是能通过js代码分析出原始值来的. 如果您对信息极其敏感, 比例登录密码这 ...
- C#微信公众号开发系列教程三(消息体签名及加解密)
http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...
- python全栈开发day115、116-websocket、websocket原理、websocket加解密、简单问答机器人实现
1.websocket 1.websocket 与轮询 轮询: 不断向服务器发起询问,服务器还不断的回复 浪费带宽,浪费前后端资源 保证数据的实时性 长轮询: 1.客户端向服务器发起消息,服务端轮询, ...
- 讲讲网络模块中加解密那点儿事--AES+BASE64
本篇文章已授权微信公众号 dasuAndroidTv(大苏)独家发布 这次想来讲讲网络安全通信这一块,也就是网络层封装的那一套加密.解密,编码.解码的规则,不会很深入,但会大概将这一整块的讲一讲. 之 ...
- 微信消息体加解密及EncodingAESKey
公众平台消息体签名及加解密方案概述 1.新增消息体签名验证,用于公众平台和公众账号验证消息体的正确性 2.针对推送给微信公众账号的普通消息和事件消息,以及推送给设备公众账号的设备消息进行加密 3.公众 ...
随机推荐
- mysql数据库存放位置
在mysql 命令行里执行 show variables like '%datadir%';
- 修复Kaos的中文显示
前段时间为了尝鲜KDE5,于是安装了Kaos 2015.2,默认的kde5桌面,速度也不错,软件更新很及时,计划淘汰掉chakra算了,一直中文在终端下显示为乱码,经网上搜索整理记录如下: (1)使用 ...
- Spring Boot学习——表单验证
我觉得表单验证主要是用来防范小白搞乱网站和一些低级的黑客技术.Spring Boot可以使用注解 @Valid 进行表单验证.下面是一个例子. 例子说明:数据库增加一条Student记录,要求学生年龄 ...
- 关于expect脚本输出的问题
写了一个expect脚本 执行ssh命令远程登录 然后telnet另外一台机器 大致如下: #!/usr/bin/expect -f set timeout set port_type [lindex ...
- 启动tomcat服务器自动执行一个方法
第一步:配置web.xml文件 添加如下代码 <servlet> <servlet-name>Timer</servlet-name> <servlet-cl ...
- nodejs后台启动
可避免关闭窗口,程序就关闭,可在后台运行 安装forever包,一般用于服务器,调试环境可不安装 npm install forever -g 启动方式如图: 查询后台运行哪些程序 forever l ...
- android 集成友盟分享之后,想自定义分享面板的看过来
第一种情况 首先上传一张默认的友盟分享的效果图 看起来还不错,但是总是有这样那样的原因,需要我们对默认效果做出一些改变. 第二种情况 如果你想做出下面的效果: 或者这样的效果 : 总之上面的效果总是在 ...
- AC日记——石子归并 51nod 1021
石子归并 思路: 经典动态规划——归并类问题: 我们把状态划为n个,即1-n的n个长度为n个状态: 那么,每个长度为i的状态都可以由i-1个长度为i-1的状态推出: 所以,dp转移方程: dp[i][ ...
- 2018 L2-027. 名人堂与代金券【结构体排序】
L2-027. 名人堂与代金券 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对于在中国大学MOOC(http://www.i ...
- gitlab gitlab runner
1.安装gitlab https://about.gitlab.com/installation/#ubuntu 2.安装runner https://docs.gitlab.com/runner/i ...