openpgp.js 关于 wp8 错误

openpgp.js on wp8 error

我在我的应用程序中使用 openPgpJs 库,该库是使用 Apache Cordova 创建的。

这是代码的一部分:

        var publicKey = openpgp.key.readArmored(_publicKey);
        openpgp.encryptMessage(publicKey.keys, text).then(function (pgpMessage) {
            // success
            callback(pgpMessage);
        }).catch(function (error) {
            // failure
            console.error(error);
        });

它工作正常但不适用于 WP8。如果失败,'cause openpgp var 未定义。在该库源中,最开始有这样的代码:

!function (e) {
"object" == typeof exports ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : "undefined" != typeof window ? window.openpgp = e() : "undefined" != typeof global ? global.openpgp = e() : "undefined" != typeof self && (self.openpgp = e())

}

所以应该定义openpgp。我怎样才能让它发挥作用?

更新 我添加了 var openpgp = window.openpgp; 并且错误消失了。现在它无法加密消息 - 并且很难调试,因为库代码被缩小了

所以,对于遇到同样问题来到这里的任何人。

  1. 使用 var openpgp = window.openpgp; 避免 "undefined" 错误。
  2. 下一个问题在 getRandomValues 函数内部 - 有一个异常 No secure random number generator available.。为了避免这个错误,我也将最后一个(有例外)语句更改为

var sjcl = window.sjcl; if (sjcl.random.isReady()) { var buf = new Uint8Array(1); bytes = sjcl.random.randomWords(buf.length); buf.set(bytes); }else{ var bytes = []; for (var i = 0; i < buf.length; i++) { bytes.push(isaac.rand()); buf.set(bytes); } } 根据@ZeroG 对这个问题的回答:Secure random numbers in javascript?

希望对大家有所帮助=)