【问题标题】:How to access SecureRandom in jsbn typescript?如何在 jsbn 打字稿中访问 SecureRandom?
【发布时间】:2021-04-19 11:53:33
【问题描述】:

我以前是这样访问jsbn.js中的SecureRandom的


var jsbn = require('jsbn');
var SecureRandom = jsbn.SecureRandom;
var secureRandom = new SecureRandom();
secureRandom.nextBytes(x);

如何在 jsbn.ts 中访问它?由于似乎要导入的功能有限

 import jsbn, {BigInteger, RandomGenerator as SecureRandom} from "jsbn";

package.json

"dependencies": {
  "jsbn": "^1.1.0"
},
"devDependencies": {
  "@types/jsbn": "^1.2.29",
}

谢谢。

【问题讨论】:

    标签: javascript typescript secure-random jsbn


    【解决方案1】:

    @types/jsbn npm 包只为 RandomGenerator 提供接口声明,不导出 SecureRandom:

    export interface RandomGenerator {
        nextBytes(bytes: number[]): void;
    }
    

    您应该实现该接口和这个 nextBytes 方法,prng 为WebAPI Crypto getRandomValues()

    例如:

    class SecureRandomGenerator implements RandomGenerator {
    
        private static getRandomBytes(size: number): Uint8Array {
            // User agent WebAPI Crypto
            if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) {
                return window.crypto.getRandomValues(new Uint8Array(size));
            }
    
            throw new Error("Web API Crypto is not available");
        }
    
        public nextBytes(bytes: number[]): void {
            const generatedBytes = SecureRandomGenerator.getRandomBytes(bytes.length);
            for (let i = 0; i < bytes.length; i++) {
                bytes[i] = generatedBytes[i];
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 2017-12-19
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      相关资源
      最近更新 更多