Erlang中的RSA签名

RSA签名校验

-spec check_rsa_sign(DataBin, Sign, RSAPublicKeyBin, DigestType) -> boolean when
    DataBin :: binary(), 
    Sign :: binary(),
    RSAPublicKeyBin :: binary()
    DigestType :: 'md5' | 'sha' | 'sha224' | 'sha256' | 'sha384' | 'sha512'.
check_rsa_sign(DataBin, Sign, RSAPublicKeyBin, DigestType) ->
    PemEntries = public_key:pem_decode(RSAPublicKeyBin),
    RSAPubKey = public_key:pem_entry_decode(hd(PemEntries)),
    Base64Sign = base64:decode(Sign),
    public_key:verify(DataBin, DigestType, Base64Sign, RSAPubKey).

产生RSA签名

-spec gen_rsa_sign(MsgBin, DigestType, KeyBin) -> binary() when
    MsgBin :: binary(),
    DigestType :: 'md5' | 'sha' | 'sha224' | 'sha256' | 'sha384' | 'sha512',
    KeyBin :: binary().
gen_rsa_sign(MsgBin, DigestType, KeyBin) ->
    [Entry] = public_key:pem_decode(KeyBin),
    RSAPriKey = public_key:pem_entry_decode(Entry),
    SignBin = public_key:sign(MsgBin, DigestType, RSAPriKey),
    base64:encode(SignBin).

示例

-define(RSA_PUBLIC_KEY, <<"-----BEGIN PUBLIC KEY-----\nXXXRSA_PUBLIC_KEYXXX\n-----END PUBLIC KEY-----">>).
-define(RSA_PRIVATE_KEY, <<"-----BEGIN RSA PRIVATE KEY-----\nXXXRSA_PRIVATE_KEYXXX\n-----END RSA PRIVATE KEY-----">>).

test() ->
    DataBin = make_data(),
    gen_rsa_sign(DataBin, 'md5', ?RSA_PRIVATE_KEY),
    check_rsa_sign(DataBin, Sign, ?RSA_PUBLIC_KEY, 'md5').

 

转载于:https://www.cnblogs.com/sunbin-hello/p/6480923.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值