我有一个应用程序,我必须验证来自不同用户的数字签名。这些用户正在使用不同的语言/平台进行编程,例如 .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 中测试了这个实现:
- 根据规定的程序生成一个字符串。
- 使用 . 将字符串转换为二进制
term_to_binary/1
。 - 使用 MD5 作为摘要类型的私钥对字符串(二进制)进行数字签名。(我使用公钥来验证这一点)。
- Base64 编码签名输出并生成 base64 编码字符串。这个 base64 编码的字符串输出就是签名。
我的问题是,当我term_to_binary/1
用来管理二进制文件时,我的用户不知道这一点,并且无论如何它都不适用于他们,因此使用他们自己的适用方法,就像 Java 中的方法一样;
... some left out code ...
String s = SignatureStringData;
byte[] data = s.getBytes("UTF-8");
signature.update(data);
byte[] digitalSignature = signature.sign();
生成数字签名,我发现无法验证。
我的问题是,我在 Erlang 中实现它的方式是处理来自 Erlang 中所有其他平台的数字签名的通用方式,还是有另一种方式,这只适用于 Erlang/OTP 用户?谢谢你。