使用其他语言的Erlang / OTP签名和验证数字签名

时间:2018-11-10 16:39:48

标签: erlang elixir otp yaws nitrogen

我有一个应用程序,需要验证来自不同用户的数字签名。这些用户正在编程使用不同的语言/平台,例如.NET,JAVA,C等;但是可能会在Erlang / OTP中开发应用程序。当我测试来自Erlang / OTP平台的应用程序时,一切都可以按预期工作,但是从其他平台使用时,它将失败。

这是验证签名的部分。

Signature - Base64 enconded string digital signature as 
recieved from users.

SignBinData - is obtained by reconstructing a String (using data 
that was md5 digested and used to generate the signature), that is,

SignBinData = term_to_binary(String)

Then verifying the signature using 
public_key:verify(SignBinData, md5, base64:decode(Signature), UserPublicKey).

我使用以下方法在Erlang / OTP中测试此实现:

  1. 根据规定的过程生成字符串。
  2. 使用term_to_binary/1将字符串转换为二进制。
  3. 使用私钥以MD5作为摘要类型对字符串(二进制)进行数字签名。 (我使用公共密钥来验证这一点。)
  4. Base64对签名输出进行编码,并生成一个base64编码的字符串。此base64编码的字符串输出是签名。

我的问题是,当我使用term_to_binary/1来管理二进制文件时,我的用户不知道该二进制文件,并且该二进制文件不适用于他们,因此使用自己适用的方法(如Java中的方法); < / p>

... some left out code ...
String s = SignatureStringData;
byte[] data = s.getBytes("UTF-8");
signature.update(data);

byte[] digitalSignature = signature.sign();

生成数字签名,我发现无法验证。

我的问题是,我在Erlang中实现它的方式是处理来自Erlang中所有其他平台的数字签名的通用方式,还是还有另一种方式,仅适用于Erlang / OTP用户?谢谢。

0 个答案:

没有答案