erlang的des demo

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

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

转载于:https://my.oschina.net/u/191928/blog/661519

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值