Erlang的SHA256WithRSA签名和验签

爱⌒轻易说出口 提交于 2019-11-26 13:55:26
-spec rsa_sha256_sign(Content :: binary(), PriKey :: binary()) -> binary().
rsa_sha256_sign(Content, PriKey) ->
    [Entry] = public_key:pem_decode(PriKey),
    RSAPriKey = public_key:pem_entry_decode(Entry),
    SignBin = public_key:sign(Content, sha256, RSAPriKey, [{rsa_padding, rsa_pkcs1_padding}]),
    Sign = base64:encode(SignBin),
    Sign.

-spec rsa_sha256_verify(Content :: binary(), Base64Sign :: binary(), PubKey :: binary()) -> boolean().
rsa_sha256_verify(Content, Base64Sign, PubKey) ->
    %% 将签名的base64编码解码
    Sign = base64:decode(Base64Sign),
    %% 获取RSA public key
    [Entry] = public_key:pem_decode(PubKey),
    RSAPubKey = public_key:pem_entry_decode(Entry),
    %% 验证签名
    public_key:verify(Content, sha256, Sign, RSAPubKey).

test() ->
    BaseBin = <<"666">>,
    PriKey = <<"-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDs0oq2/PDjGQBFt2mLjsnFIJwYU84phN/4bg2VM7GS5OWomEbtLAOvLeNB1kXzd2uT1itgVVuX6z9IkhOeucFP2cImquhRWkUNBSznfar8u+JJpQP9e+o9SXkpYEzjHcbyShacXPR5FvDiohYzZMAPqT0KMTKkWyj1I9GU3SfyLwIDAQABAoGBAIRIKmGCMg+4BFXs2FCy5nNs/qP8E9lPNkevOXkQ0eyKXNnqjRunjTtJt3or9RDEsNt4MuxxYWMfbU7dAYaUnawojVQGzOyvejq0Pu+27bvPAazHB/8TDhS7bNtIWvOTNw1+DXN3V/LH1wEihEjRVJRfPvOVy9RgAG7suz3ncWoBAkEA+etAAlFmbxS3PryF4Ce9dYcuVo6Mj5rpbjGWitCa5tw231jH5PZtUZGipwlcJRfsy8EAK0s+CzfzOJNBlbxvLwJBAPKVtp8SdoyQf0wk+x3uwWRf0lPYWFzUT8wF9yZd/rqUmVMKvphuUFybxOy5o/E34ipS0opxbiHAsSdAPKwT7QECQF5ojOyTPWPW6oYrh1MvD/X20/1kqhqRhX7YAqt7tBhjteLXUePfZ1p57ny1H3bvu8cYqGyyZsSsJRgJIKxk24cCQBdBqSdo8rqZI8seBIEjIaFI2nY1WItVw2yw6bfg7QngMy7V6d3dPZETUfbL+V6n1+Ps2shxBXjw60rzCp4IrwECQGPc7nmSnp44MAfb7pKaMZz92brjql18xoHeyPCDZ+YeP0NmxPJQ8jOg5xOVFENwfhj1m9m5XzYO3fLXbe357So=\n-----END RSA PRIVATE KEY-----">>,
    PubKey = <<"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDs0oq2/PDjGQBFt2mLjsnFIJwYU84phN/4bg2VM7GS5OWomEbtLAOvLeNB1kXzd2uT1itgVVuX6z9IkhOeucFP2cImquhRWkUNBSznfar8u+JJpQP9e+o9SXkpYEzjHcbyShacXPR5FvDiohYzZMAPqT0KMTKkWyj1I9GU3SfyLwIDAQAB\n-----END PUBLIC KEY-----">>,
    Sign = rsa_sha256_sign(BaseBin, PriKey),
    rsa_sha256_verify(BaseBin, Sign, PubKey).

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!