erlang的des demo
2016-04-17 00:00
423 查看
最近项目要上加密,找了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.
代码可用,大家可以再优化一下。
相关文章推荐
- 团队协作会议工具
- maven install安装ojdbc14到本地资源库
- maven 将依赖包打包到jar 里面
- Ubuntu打开终端的方法三种
- voltdb将编写的存储过程jar添加的数据库里面
- 模板适应mycncart 1.4.0.0 版本
- MongoDB初遇
- win7升win10
- 用信号量机制解决生产者消费者问题
- SPF 记录:原理、语法及配置方法简介
- [android] 手机卫士设备管理权限锁屏
- bash shell 需知
- Unsupported major.minor version 52.0
- codeforces_660D. Number of Parallelograms
- 实现一个栈,实现入栈,出栈,求最小值,时间复杂度为O(1)
- iOS开发总结之自定义非等高cell-xib(方法一)
- C#_ProgressBar 显示进度数字
- Memory Leak Detection in Embedded Systems
- 属性动画
- iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD