AES-CBC шифрование с HMAC можно использовать из стандартной библиотеки N2O:
pickle(Data) ->
Message = term_to_binary({Data,now()}),
Padding = size(Message) rem 16,
Bits = (16-Padding)*8, Key = secret(), IV = crypto:rand_bytes(16),
Cipher = crypto:block_encrypt(aes_cbc128,Key,IV,<<Message/binary,0:Bits>>),
Signature = crypto:hmac(sha256,Key,<<Cipher/binary,IV/binary>>),
base64:encode(<<IV/binary,Signature/binary,Cipher/binary>>).
secret() -> wf:config(n2o,secret,<<"ThisIsClassified">>).
depickle(PickledData) ->
try Key = secret(),
Decoded = base64:decode(wf:to_binary(PickledData)),
<<IV:16/binary,Signature:32/binary,Cipher/binary>> = Decoded,
Signature = crypto:hmac(sha256,Key,<<Cipher/binary,IV/binary>>),
{Data,_Time} = binary_to_term(crypto:block_decrypt(aes_cbc128,Key,IV,Cipher),[safe]),
Data
catch E:R -> wf:info(?MODULE,"Depicke Error: ~p",[{E,R}]), undefined end.
https://github.com/5HT/n2o/blob/master/src/handler...
pickle/1 и depickle/1 прошли верификацию:
https://github.com/5HT/n2o/issues/63