文档章节

erlang的des demo

格通
 格通
发布于 2016/04/17 22:55
字数 229
阅读 73
收藏 1

最近项目要上加密,找了des模块试试手,写了一个小demo。

encrypt(Text) ->
	crypto:start(),
	encrypt_chunk("12345678", list_to_binary(Text)).


encrypt_chunk(PassWord, BinTex) when byte_size(BinTex) >= 8 ->
	{Chunk, Rest} = split_binary(BinTex, 8),
	<< (crypto:block_encrypt(des_ecb, PassWord, Chunk))/binary, (encrypt_chunk(PassWord, Rest))/binary >>;

encrypt_chunk(PassWord, <<>>) ->
	crypto:block_encrypt(des_ecb, PassWord, <<0:64>>);

encrypt_chunk(PassWord, BinTex) ->
	PadSize = (8 - byte_size(BinTex)) * 8,
	PadBin = <<BinTex/binary, 0:PadSize>>,
	crypto:block_encrypt(des_ecb, PassWord, PadBin).

decrypt(BinTex) ->
	binary_to_list(decrypt("12345678", BinTex)).

decrypt(PassWord, BinTex) when byte_size(BinTex) >= 8 ->
	{Chunk, Rest} = split_binary(BinTex, 8),
	case Rest of
		<<>> ->
			Result = crypto:block_decrypt(des_ecb, PassWord, Chunk),
			delete_pading(Result);
		_ ->
			<< (crypto:block_decrypt(des_ecb, PassWord, Chunk))/binary ,(decrypt(PassWord, Rest))/binary >>
	end;
decrypt(PassWord, BinTex) ->
	Result = crypto:block_decrypt(des_ecb, PassWord, BinTex),
	delete_pading(Result).
	
delete_pading(<<0:64>>) ->
	<<>>;
delete_pading(<<A, 0:56>>) ->
	<<A>>;
delete_pading(<<A, B, 0:48>>) ->
	<<A, B>>;
delete_pading(<<A, B, C, 0:40>>) ->
	<<A, B, C>>;
delete_pading(<<A, B, C, D, 0:32>>) ->
	<<A, B, C, D>>;
delete_pading(<<A, B, C, D, E, 0:24>>) ->
	<<A, B, C, D, E>>;
delete_pading(<<A, B, C, D, E, F, 0:16>>) ->
	<<A, B, C, D, E, F>>;
delete_pading(<<A, B, C, D, E, F, G, 0:8>>) ->
	<<A, B, C, D, E, F, G>>;
delete_pading(Binary) ->
	Binary.

代码可用,大家可以再优化一下。

© 著作权归作者所有

共有 人打赏支持
格通

格通

粉丝 7
博文 156
码字总数 39155
作品 0
广州
程序员
OTP-21.0-rc1 发布,Erlang 编写的应用服务器

Erlang OTP-21.0-rc1 发布,OTP (Open Telecom Platform) 是一个用 Erlang 编写的应用服务器。这是 OTP 21发布之前的两个计划发布候选版本中的第一个。 Erlang / OTP 21 是一个新的主要版本,...

雨田桑
05/03
0
0
OTP 21.0 RC 2 发布,Erlang 编写的应用服务器

OTP 21.0 RC 2 发布了,这是 OTP 21 发布前的两个计划发布候选版本中的第二个。OTP (Open Telecom Platform) 是一个用 Erlang 编写的应用服务器。 Erlang / OTP 21 是一个新的主要版本,具有...

雨田桑
05/31
0
0
收藏的博客 -- erlang学习

一、技术博客 http://blog.csdn.net/erlib 为什么我要选择erlang+go进行服务器架构(1) 为什么我要选择erlang+go进行服务器架构(2) http://www.qingliangcn.org/ https://github.com/qinglian...

libaineu2004
2017/09/14
0
0
JFinal如何处理从前台传回来的二维数组?

以下是用JF接收数据时在console中的信息,说明JF是可以识别这些记录。但不知道用JF在服务器端如何获取这些数据(JF已经将这些数据输出到了console中),我用 String myNames1[] =getParaValu...

hyhdl888
2014/09/16
1K
5
fiddler调试手机app的https请求时,出现After the client received notice of the established CONNECT, it failed to send any data.

我在使用Fiddler调试手机app的时候,手机app发送的是https请求,有的手机可以发送成功,有的不能。 能发送成功的时候有两条: # Result Protocol Host URL Body Caching Content-Type Process...

coolcao
2014/10/31
8.3K
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

文件的压缩与解压(linux)

Linux下*.tar.gz文件解压缩命令 1.压缩命令:   命令格式:tar -zcvf 压缩后文件名.tar.gz 被压缩文件名 可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。 2.解压缩命令: ...

qimh
36分钟前
3
0
invalid character found in the request target 异常

这个异常时因为Tomcat 9不支持请求格式出现“{”等非法字符的问题 因为tomcat版本问题遇到的坑,记录一下。 问题 今天由于要测试一下订单详情页的异步查询,在本地起了一个服务,发送的请求是...

edwardGe
40分钟前
4
0
发现抓包软件fiddler的bug

1个请求他跳转之后,直接400,被拦在了Apache,使用fiddler 的,replay requests 是同样的结果,但是replay composer确是正常的。 也就是说这replay requests 是发原来的包,replay composer...

NLGBZJ
50分钟前
1
0
linux screen 命令详解

shell关闭后, 主机仍然运行 screen命令 启动jenkins以后, screen, 然后按ctrl+a 再按d 这样暂停了子界面, 这时候回到了父界面 用screen –ls查看目前子界面的状态 [root@free /]# screen -l...

SuShine
51分钟前
4
0
mac机器切换无线网络导致网页不能打开的问题

问题: 公司和家里使用不同的WI-FI,每次从家到公司时自动切换网络后,公司的许多地址不能访问, ping域名是可以ping同的,但是网页却打不开... 问题分析: 初步猜想是DNS缓存的问题? 对于MAC系统没...

Lennie002
54分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部