Подписание и проверка цифровых подписей в Erlang / OTP с других языков - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть приложение, в котором я должен проверять цифровые подписи разных пользователей. Эти пользователи программируют на разных языках / платформах, таких как .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;

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

byte[] digitalSignature = signature.sign();

для создания цифровых подписей, которые я считаю невозможным проверить.

Мой вопрос заключается в том, является ли способ, которым я внедряю его в Erlang, универсальный способ обработки цифровых подписей со всех других платформ в Erlang, или есть другой способ, и это применимо только к пользователям Erlang / OTP? Спасибо.

...