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