您的位置:首页 > 其它

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.


代码可用,大家可以再优化一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: