erlang的des demo
博客专区 > 格通 的博客 > 博客详情
erlang的des demo
格通 发表于2年前
erlang的des demo
  • 发表于 2年前
  • 阅读 64
  • 收藏 1
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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

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

共有 人打赏支持
格通
粉丝 6
博文 156
码字总数 39155
×
格通
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: