나는 및 importKey 작업을 수행하기 위해 Cordova 및 forge library 및 브라우저의 Web Crypto API과 협력하고 있습니다. 그럼에도 불구하고 Android 기기의 Web Crypto API는 crypto.getRandomValues()이고 SubtleCrypto는 정의되지 않았습니다 (cryptotle). 그래서 Web Crypto API shrim과 그 종속성 Promiz을 추가하면이 참조가 누락되었다고 생각했지만 아무 것도 변경되지 않았습니다. 어떤 아이디어라도 제발?웹 암호화 API cryptotletle은 Apache Cordova에서 정의되지 않았습니다.
Chrome에서 PC에서 디버깅 52.0.2743.116은 전체 웹 암호화 API를 제공하지만 Android 4.4.4에서는 Chrome 버전 52.0.2743.98 인 Android 기기에서 사용할 수 있습니다. 웹 API는 crypto.getRandomValues ()에만 제한됩니다.
How to load a PKCS#12 Digital Certificate with Javascript WebCrypto API코드 예제에서
I'am 기본적으로 재 작성 대답 :
나는 또한 많이했다
<script src="lib/promiz.min.js"></script>
<script src="lib/webcrypto-shim.js"></script>
자바 스크립트 파일
//working with forge without issue
var pkcs12Der = forge.util.decode64(pk);
var pkcs12Asn1 = forge.asn1.fromDer(pkcs12Der);
var pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, "password");
console.log(pkcs12);
privateKey = null;
// load keypair and cert chain from safe content(s)
for (var sci = 0; sci < pkcs12.safeContents.length; ++sci) {
var safeContents = pkcs12.safeContents[sci];
for (var sbi = 0; sbi < safeContents.safeBags.length; ++sbi) {
var safeBag = safeContents.safeBags[sbi];
// this bag has a private key
if (safeBag.type === forge.pki.oids.keyBag) {
//Found plain private key
privateKey = safeBag.key;
} else if (safeBag.type === forge.pki.oids.pkcs8ShroudedKeyBag) {
// found encrypted private key
privateKey = safeBag.key;
} else if (safeBag.type === forge.pki.oids.certBag) {
// this bag has a certificate...
}
}
}
//function for importingKey
function _importCryptoKeyPkcs8(privateKey, extractable) {
var privateKeyInfoDerBuff = _privateKeyToPkcs8(privateKey);
//import key will not work due to missing reference crypto.subtle
return window.crypto.subtle.importKey(
'pkcs8',
privateKeyInfoDerBuff, {
name: "RSASSA-PKCS1-v1_5",
hash: {
name: "SHA-256"
}
},
extractable, ["sign"]);
}
_importCryptoKeyPkcs8(privateKey, true).
then(function(cryptoKey) {
//sign will not work due to missing reference crypto.subtle
window.crypto.subtle.sign({
name: "RSASSA-PKCS1-v1_5"
},
cryptoKey,
digestToSignBuf)
.then(function(signature2) {
});
});
샘플 코드를 보여줄 수 있습니까? 특히 webcrypto-shim 라이브러리를 사용합니다. – e666
@ e666 코드 샘플이 추가되었습니다. 정의되지 않은 window.crypto.subtle을 올바르게 참조하지 못합니다. – Marek
이 작업을 위조 할 수 없습니까? 'window.crypto'가 전혀 필요하지 않습니까? –