Функция KEYUTIL.getKey из библиотеки
jsrsasign предназначена для универсального импорта
криптографических ключей различных форматов в единое внутреннее
представление. Это ключевая точка входа при работе с RSA, EC и другими
алгоритмами, поскольку большинство операций (подпись, проверка,
шифрование) требуют объект ключа, а не его строковое представление.
Поддерживаются как открытые, так и закрытые ключи, включая защищённые
паролем. Функция автоматически определяет формат входных данных и
преобразует их в соответствующий объект (RSAKey,
KJUR.crypto.ECDSA и др.).
KEYUTIL.getKey обрабатывает широкий спектр форматов:
PEM (Privacy-Enhanced Mail):
DER (в виде hex-строки):
JWK (JSON Web Key):
Сырые параметры:
n, e, d для
RSAvar keyObj = KEYUTIL.getKey(key, passcode);
key — строка, объект или hex-данныеpasscode — пароль для зашифрованных ключей
(опционально)Пример: открытый ключ
var pubKeyPEM = `
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...
-----END PUBLIC KEY-----
`;
var pubKey = KEYUTIL.getKey(pubKeyPEM);
Результат — объект RSA, пригодный для проверки подписи или шифрования.
var prvKeyPEM = `
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA...
-----END RSA PRIVATE KEY-----
`;
var prvKey = KEYUTIL.getKey(prvKeyPEM);
Объект содержит все необходимые параметры (n,
e, d, p, q).
Если ключ защищён паролем:
var encKeyPEM = `
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFHjB...
-----END ENCRYPTED PRIVATE KEY-----
`;
var key = KEYUTIL.getKey(encKeyPEM, "password123");
Функция автоматически:
var jwk = {
kty: "RSA",
n: "sXchv...",
e: "AQAB",
d: "Vwxyz..."
};
var key = KEYUTIL.getKey(jwk);
Поддерживаются как публичные, так и приватные JWK.
var hexKey = "3082010A0282010100...";
var key = KEYUTIL.getKey(hexKey);
Используется при работе с бинарными ASN.1 структурами.
var key = KEYUTIL.getKey({
n: "a1b2c3...",
e: "010001",
d: "deadbeef..."
});
Полезно при ручной сборке ключей или интеграции с другими системами.
KEYUTIL.getKey самостоятельно определяет:
Это избавляет от необходимости вручную указывать формат.
При некорректных данных возможны ошибки:
Рекомендуется оборачивать вызов в try/catch:
try {
var key = KEYUTIL.getKey(pem, password);
} catch (e) {
console.error("Ошибка импорта ключа:", e);
}
В зависимости от входных данных возвращаются:
RSAKey — для RSAKJUR.crypto.ECDSA — для эллиптических кривыхDSA — для DSA (ограниченная поддержка)Каждый объект содержит методы:
signverifyencryptdecryptvar pem = `-----BEGIN PRIVATE KEY-----...`;
var key = KEYUTIL.getKey(pem);
var sig = new KJUR.crypto.Signature({ alg: "SHA256withRSA" });
sig.init(key);
sig.updateString("data");
var signature = sig.sign();
var ecKeyPEM = `-----BEGIN EC PRIVATE KEY-----...`;
var key = KEYUTIL.getKey(ecKeyPEM);
Возвращается объект ECDSA, содержащий:
curve)x, y)d)Ошибка “unsupported format”
Ошибка расшифровки
Некорректный JWK
n, e)KEYUTIL.generateKeypair — генерация ключейKEYUTIL.getPEM — экспорт ключа обратно в PEMKEYUTIL.getJWKFromKey — преобразование в JWK| Тип входа | Результат |
|---|---|
| PEM строка | Объект ключа |
| Hex DER | Объект ключа |
| JWK | Объект ключа |
| JS объект | Объект ключа |
KEYUTIL.getKey выступает универсальным преобразователем
ключей, обеспечивая совместимость различных форматов и упрощая
криптографические операции внутри jsrsasign.