js одобрен SHA1withRSA

внешний интерфейс алгоритм GitHub JavaScript

Предисловие:

Недавно алгоритм подписи SHA1withRSA был непреднамеренно использован в проекте разработки.Глядя на Baidu, там относительно мало информации.Благодаря примеру исходного кода для запроса метода использования у меня есть некоторое понимание этого, поэтому я подытожу его здесь.

SHA1WithRSA: подписывайте с помощью алгоритма SHA и шифруйте с помощью алгоритма RSA.

В частности, здесь подробно не описываются алгоритмы SHA и RSA, а только краткое введение в то, как использовать SHA1withRSA для ввода данных в алгоритм подписи.

в основном используетсяБиблиотека jsrsasign очень мощная.

Шаг 1: Сначала сгенерируйте пару ключей (которая может быть сгенерирована автоматически или предоставлена ​​в фоновом режиме).

Нам не нужно понимать, как сгенерировать секретный ключ, и мы не знаем, как выполнять поиск в Baidu. Вот URLWeb.Error.net/net RSA может сканировать...

Здесь у нас есть открытый и закрытый ключи, например:

Обратите внимание, что и открытый, и закрытый ключи должны иметь заголовок и хвост.

открытый ключ:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCU4aJUKL4FKuMQ6WMt3slH8uoh
w4Agrd5sBA6iXKZFyAosdMfwn/CB64xwVnZSUeHYzTKlAkGYACOY9JWp/K3eHTXV
80oY98FwZmcVpM5y5YTfTvW/zT4kZ9eF1EFrfixX2t2vLKuXH/2Pd78+284kl2SB
batPq/N/du/1Ruq0PwIDAQAB
-----END PUBLIC KEY-----

Закрытый ключ:

-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJTholQovgUq4xDp
Yy3eyUfy6iHDgCCt3mwEDqJcpkXICix0x/Cf8IHrjHBWdlJR4djNMqUCQZgAI5j0
lan8rd4dNdXzShj3wXBmZxWkznLlhN9O9b/NPiRn14XUQWt+LFfa3a8sq5cf/Y93
vz7bziSXZIFtq0+r83927/VG6rQ/AgMBAAECgYBWpKlPyRYs87SJlwl9HHaPRLM1
Sw0593XF7uaFXt31JmGlVaE2TB4vveFRT0A00Cpbfa/Hj/SUfSA6V7zx3HdiNOoS
O23s4ean0fraK4vGuyXL/LtAWAE37X59ciLnZCmGxpEr6PmvbIyxRHG0zZFwfr4G
Tr2BlpYpBJ7iMxM1wQJBAMNdbe+E8Rx3sT3VZcdQ3JGOlBdylCrVb09mu5dmcwxu
dCNxUjwt175GRMmW/6Ql384CqYE19r50INFaI/TJFdcCQQDDFuNtT3MxzAD8kslo
qO6jx2wW18ogNdtc9+zlFd2hBAZZshlEVAW8iyQCyll65cqf/egN8I1/ElBfIrMM
qjfZAkBepXbLITbGOd5uPGIQi8Yv5kksit/pWHmSmAytrn5yOVieixnx+auZjOVq
XHMBDTA91+BSrtgZMJ1tjyP4RSsFAkBSw3QKXKlXF9/XRwKRFxHeg2zUqAlE7vQ4
Fan3afZTJ9z10nurpCWm3jSRxnx9id0TUOlQeJveq8tTAOqK1e/JAkEApLGftZP7
6EVr0sz2z4FnuAtp7YmbDxA7nKLKNYjolLyrw5gM+mGIcYAyxfPUz+ddTNtdfuh0
sjFkxWcUVBWYnQ==
-----END PRIVATE KEY-----

Шаг 2. Используйте закрытый ключ для подписи данных

import Jsrsasign,{KJUR,hex2b64} from 'jsrsasign';

// 用自己的私钥对url进行签名
export function signature(url){
  // 私钥加签
  let privateKey = '-----BEGIN PRIVATE KEY-----MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKpHfFmxCZuMHDoeNod+TTSeE4Y6TusQ8UB4kquw0kQDQfNTpuEP0Y2o0Oc6TPI7F4zJsy266bWp3zznvOlLXwObFcz1aAGXHHOybgu4ma+nwYvX5/9R2HRaExTPABe9GjhpMPLWWoJAsCLHm3J0tzMVI7rq1bcMD3c4lI3omdXhAgMBAAECgYEAibVAWqTzWSlplpLilJdPRvNkZNR5CF/uS653J4Tbt4dO6cNIHZGWblMNh0K+AdRKSmDAmIYmBfW4hWAAhkefMU+eHP4fzPZ1D/FC7EMceRCYmfQZST30QBEj93Qb8qhlP9bn/KZ3UGdrEHTERGOEaV5cmJT15iJx7jbyz/YNRsECQQDhm4j6ii+b7PuLCGz49Ajv3WxMH/TlZFWaWjsIHjrA1moSiCN4zeLZOfEhpQzKz8liMDrotbBoo+lIxYxdFHGJAkEAwTfbwUTBB/h3k9pE7suA/XcnUHPA/ZJNpHc2LSDwyr9FlonNjUzBQnTAFrQAeWQ0LsGjoyJTGN5UME4GBypjmQJAOHTDgm6yG0Lib5hcLLBkzCGMyD/2+LBy+3046H8oFLmTMa//sGtVKSbmwJSc7uOwcXHATBurWYQrDJri1SgYgQJBAIAXfukuomWdU/DB18cTRI1ES9zrEDtKnYx1t4XNe7R9fy2gZ5PQGaLr8VhbtqDDTFDe8JO6sqoe4mMvppFjiakCQC099wyiYfj8edUGmKRlWI4lGkckj0pKpwiIeVJ0fzAvhHzGTvySIj0fngqKy6bs4GnDNJQoQ4UnPRi7srC0voA=-----END PRIVATE KEY-----';
  let sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA", "prov": "cryptojs/jsrsa","prvkeypem": privateKey}); 
  sign = hex2b64(sign); 
  return sign;
};

Используя синтаксис es6, его должно быть легче понять.

url — это данные, которые нужно подписать,hex2b64 должен преобразовать результат в формат base64.

Результат знаковый.

Шаг 3. Используйте открытый ключ для проверки подписи.

import Jsrsasign,{KJUR,hex2b64} from 'jsrsasign';
// 用公钥对签名进行验签

export function verify(url,data) {
  try {
    let publicKey = '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCEO23dYaK65jtxrtBHoT8nVlfw3kGw6fAJBJ5GuFL01QQ1yI42Fl+3fxHJauZiMoXBbB+WdeBh4iypp9U9cXLuf5UldNOFKY667sy4HLSYyB6GcLrSpEutRSTbMC2wwu2YOQt73cUob9li2usF/+p8EuJ++unySr5V151lqCJrxwIDAQAB-----END PUBLIC KEY-----';
    let sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA", "prov": "cryptojs/jsrsa","prvkeypem": publicKey});
    sig.updateString(url);
    let result = sig.verify(data);
    return result;
  } catch(e) {
    console.error(e);
  }
};

URL: подписанные данные,

data: Подпись, полученная после подписания.

в основномverifyспособ проверить.

Резюме: Если у вас есть вопросы или сообщения об ошибках, вы можете проверить ресурсы на github, там есть примеры. адрес гитхаба:GitHub.com/Но на самом деле/Просто позвольте SAS….

Если у вас есть какие-либо вопросы, пожалуйста, поправьте меня.