4

私は Cordova とforge ライブラリとブラウザのWeb Crypto APIを使用して署名importKey操作を実行しています。それにもかかわらず、Android デバイスの Web Crypto API はcrypto.getRandomValues()のみを提供し、SubtleCrypto は定義されていません (crypto.subtle)。したがって、Web Crypto API shrimとその依存関係であるPromizを追加すると、この参照の欠落が修正されると考えましたが、何も変わっていません。何かアイデアはありますか?

Chrome 52.0.2743.116 の PC でのデバッグは完全な Web Crypto API を提供しますが、Android 4.4.4 を搭載した Chrome バージョン 52.0.2743.98 を搭載した Android デバイスでは. Web API は crypto.getRandomValues() のみに制限されています。

私は基本的にHow to load a PKCS#12 Digital Certificate with Javascript WebCrypto APIからの回答を書き直しています

コード例:

index.html の内部

<script src="lib/promiz.min.js"></script>
<script src="lib/webcrypto-shim.js"></script>

JavaScriptファイル内

//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) {

        });
});
4

2 に答える 2

0

コルドバ アプリの Web Crypto API にも多くの問題があり、キーをインポートまたは保存するための解決策が見つかりませんでした。

しかし、昨日見つけたのは、この JS-Library です。

https://github.com/wwwtyro/cryptico

コードを変更して使用できるかもしれません。

于 2016-08-23T18:47:00.197 に答える