问题描述
我以前通过这种方式访问 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",}
谢谢。
解决方法
@types/jsbn npm 包只提供RandomGenerator 的接口声明,不导出 SecureRandom:
export interface RandomGenerator {
nextBytes(bytes: number[]): void;
}
您应该使用 prng 作为 WebAPI Crypto getRandomValues()
实现该接口和此 nextBytes 方法例如:
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];
}
}
}