文档章节

erlang的des demo

格通
 格通
发布于 2016/04/17 22:55
字数 229
阅读 68
收藏 1
点赞 1
评论 0

最近项目要上加密,找了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

OTP 21.0 RC 2 发布,Erlang 编写的应用服务器

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

雨田桑 ⋅ 05/31 ⋅ 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

JFinal如何处理从前台传回来的二维数组?

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

hyhdl888 ⋅ 2014/09/16 ⋅ 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 ⋅ 6

Android平台和java平台 DES加密解密互通程序及其不能互通的原因

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

李茂冉 ⋅ 2016/05/07 ⋅ 0

Android平台和java平台 DES加密解密互通程序及其不能互通的原因 .

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

鉴客 ⋅ 2011/12/26 ⋅ 11

rabbitmq安装遇到的坑

搞了好几天,终于把rabbitmq3.6.3安装上了,刚开始我用了高版本的erlang(OTP 18.3)高版本的rabbitmq(如3.6.3)一直安装不上,报erlang最低版本R16B03,但我明显Erlang比这个版本还要高啊!于...

tree2013 ⋅ 2016/12/27 ⋅ 0

拿Erlang来拯救谁?---Erlang学习总结一

工作中主要使用C/C++作为开发语言。 也曾在PHP,JAVA,JS,LUA上逗留过,但对它们,我没有花费过多的精力。部分原因可能是由于工作不能实际使用这些语言来开发项目,而我的理解是它们对我的吸引...

逍遥客 ⋅ 2011/11/08 ⋅ 1

数据加密标准(DES)的C#实现(1)

/**// 数据加密标准(DES)的C#实现(1) * 采用随机的密钥Key和初始化向量IV加密 * 夏春涛 Email:xChuntao@163.com Blog:http://bluesky521.cnblogs.com 运行环境:.net2.0 framework */ /**// ...

夏春涛 ⋅ 2007/12/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 17分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 19分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 29分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 31分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 34分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 35分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 今天 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部