对于加解密,需客户端和服务器制定好对应的规则(如:加密算法(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转码以及反序列化的解密等东西.

erlang的token值加解密的更多相关文章

  1. 一个密码经过多次MD5加密能否提高安全性?Java MD5盐值加解密

    什么是MD5? MD5(Message Digest Algorithm 5,信息摘要算法5),是计算机广泛使用的摘要算法(又称哈希算法)之一.MD5是将一段信息,通过其不可逆的字符串变换算法,产生了 ...

  2. java和erlang之间的DES加解密

    app登录,登录的密码要用DES加密,服务器是用erlang,客户端要同时支持多平台(Android.iOS).首先,Java端的DES加密的实现方式, 少说废话了,直接上代码,如下: public ...

  3. springboot-jjwt HS256加解密(PS:验证就是解密)

    最近项目需要用到类似access token进行加解密.验签的需求,本人在此做个小笔记记录一下,以供他人参考. 一共会用到2中加解密,HS256 和 RS256,本文只是对 HS256做个备注,好了直 ...

  4. SpringBoot+ShardingSphere彻底解决生产环境数据库字段加解密问题

    前言   互联网行业公司,对于数据库的敏感字段是一定要进行加密的,方案有很多,最直接的比如写个加解密的工具类,然后在每个业务逻辑中手动处理,在稍微有点规模的项目中这种方式显然是不现实的,不仅工作量大而 ...

  5. js javascript 简易随机值穿插加解密【原】

    适用场景 本方法适用于需要对敏感信息进行加密传输,但加解密要求又不高的场景,因为是前台的javascript加解密,所以其实还是能通过js代码分析出原始值来的. 如果您对信息极其敏感, 比例登录密码这 ...

  6. C#微信公众号开发系列教程三(消息体签名及加解密)

    http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...

  7. python全栈开发day115、116-websocket、websocket原理、websocket加解密、简单问答机器人实现

    1.websocket 1.websocket 与轮询 轮询: 不断向服务器发起询问,服务器还不断的回复 浪费带宽,浪费前后端资源 保证数据的实时性 长轮询: 1.客户端向服务器发起消息,服务端轮询, ...

  8. 讲讲网络模块中加解密那点儿事--AES+BASE64

    本篇文章已授权微信公众号 dasuAndroidTv(大苏)独家发布 这次想来讲讲网络安全通信这一块,也就是网络层封装的那一套加密.解密,编码.解码的规则,不会很深入,但会大概将这一整块的讲一讲. 之 ...

  9. 微信消息体加解密及EncodingAESKey

    公众平台消息体签名及加解密方案概述 1.新增消息体签名验证,用于公众平台和公众账号验证消息体的正确性 2.针对推送给微信公众账号的普通消息和事件消息,以及推送给设备公众账号的设备消息进行加密 3.公众 ...

随机推荐

  1. DNS+CDN

    参考: 一起学DNS系列文章:http://jeffyyko.blog.51cto.com/28563/186026 CDN技术原理:http://kb.cnblogs.com/page/121664 ...

  2. php通过$_SERVER['HTTP_USER_AGENT']获取浏览器相关参数

    最近不忙,同事在忙一个app项目.当听到领导安排让他做一个判断苹果还是安卓手机,如果是安卓手机下载安卓app.如果是苹果手机下载苹果app;然后我就上网搜了一下学习学习: php通过$_SERVER[ ...

  3. 强连通分量(Tarjan)模板

    贴模板,备忘. 模板1: #include<iostream> #include<cstring> #include<cmath> #include<cstd ...

  4. Codeforces Gym100971 B.Derangement (IX Samara Regional Intercollegiate Programming Contest Russia, Samara, March 13)

    昨天训练打的Gym,今天写题解. 这个题就是输出的时候有点小问题,其他的都很简单. 代码: #include<iostream> #include<cstring> #incl ...

  5. BZOJ3631 松鼠的新家(树链剖分)

    题目链接 松鼠的新家 差不多可以说是树链剖分的模板题了,直接维护即可. #include <bits/stdc++.h> using namespace std; #define REP( ...

  6. 余秋雨的话(与OI无关)

    余秋雨的话 1.假如你想要一件东西,就放它走.它若能回来找你,就永远属于你:它若不回来,那根本就不是你的. 2. 一个人会落泪,是因为痛:一个人之所以痛,是因为在乎:一个人之所以在乎,是因为有感觉:一 ...

  7. 输出n行等腰三角形(符号为*)

    输出n行等腰三角形(符号为*) 1. 核心操作 First, 找出每一行的第一个*之前需要的空格个数 规律1:设该等腰三角形一共N行, 那么第n行的第一个*之前需要的空格个数就为N-n个空格 推导过程 ...

  8. Visual Studio开启SSL的支持

    前提: 请确保已经安装了IIS Express 具体操作: 1.web项目->[右键]->[使用IIS Express]转换工程的Web服务器. 2.点击web项目,按[ctrl]+[w] ...

  9. COFF - 中间文件格式解析

    http://www.cnblogs.com/weikanzong/p/5296739.html

  10. centos中httpd Server not started: (13)Permission denied: make_sock: could not bind to address [::]:8888

    Install semanage tools: sudo yum -y install policycoreutils-python Allow port 88 for httpd: sudo sem ...