文档章节

erlang的des demo

格通
 格通
发布于 2016/04/17 22:55
字数 229
阅读 78
收藏 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 是一个新的主要版本,...

h4cd
05/03
616
3
OTP 21.0 RC 2 发布,Erlang 编写的应用服务器

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

h4cd
05/31
437
1
收藏的博客 -- 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
Android平台和java平台 DES加密解密互通程序及其不能互通的原因

网上的demo一搜一大堆,但是,基本上都是一知半解(包括我)。为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DES 加密和Java DES加密的程序不能互通。就是加密的结果不一样,...

李茂冉
2016/05/07
8
0
Android平台和java平台 DES加密解密互通程序及其不能互通的原因 .

网上的demo一搜一大堆,但是,基本上都是一知半解(包括我)。为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DES 加密和java DES加密的程序不能互通。就是加密的结果不一样,...

鉴客
2011/12/26
8.7K
11

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot + Mybatis 配置多数据源(Srping boot 二)

前置条件,你已经配置好spring boot+mybatis,可以参考之前的博客 实现逻辑通过注解+aop切面编程来动态更新datasource 第一步,配置多个DataSource server: port: 8080freezing: ...

小海bug
13分钟前
0
0
连续潜在变量---概率PCA

最大似然PCA 用于PCA的EM算法 贝叶斯PCA 因子分解

中国龙-扬科
19分钟前
1
0
Mac 安装redis 及 redis desktop manager

1.安装redis 1.1 下载地址: http://download.redis.io/releases/ 1.2 本地新建个redis文件夹 1.3 切换到redis 安装下:cd /Users/用户名/Documents/redis/redis-3.2.5 1.4 make install 1.5......

qimh
24分钟前
2
0
Caffe(二)-Python-自定义网络

这里我们用一个例子先来体验一下 首先定义一下我们的环境变量 $PYTHONPATH,我这儿是Windows开发环境,至于Windows Caffe怎么编译由读者自己下去搞定 我使用的控制台是 Windows PowerShell 添...

Pulsar-V
今天
11
0
ActiveMQ从入门到精通(二)之可靠性机制

ActiveMQ的可靠性机制 缘由( 确认JMS消息) 只要消息被确认之后,才认为消息被成功消费了。消息的成功消费包括三个阶段:客户端接收消息、客户端处理消息以及客户端确认消息。在事务性会话中...

一看就喷亏的小猿
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部