我有使用jsrsasignJKK格式的密钥为ECDSA签名生成连接(rs)签名的代码:
const sig = new Signature({ alg: 'SHA256withECDSA' });
sig.init(KEYUTIL.getKey(key));
sig.updateHex(dataBuffer.toString('hex'));
const asn1hexSig = sig.sign();
const concatSig = ECDSA.asn1SigToConcatSig(asn1hexSig);
return new Buffer(concatSig, 'hex');
Run Code Online (Sandbox Code Playgroud)
似乎工作.我也有SubtleCrypto用于实现同样的事情的代码:
importEcdsaKey(key, 'sign') // importKey JWK -> raw
.then((privateKey) => subtle.sign(
{ name: 'ECDSA', hash: {name: 'SHA-256'} },
privateKey,
dataBuffer
))
Run Code Online (Sandbox Code Playgroud)
这两个都返回128字节的缓冲区; 并且他们交叉验证(即我可以验证jsrsasign签名,SubtleCrypto反之亦然).但是,当我Sign在Node.js crypto模块中使用该类时,我似乎得到了一些完全不同的东西.
key = require('jwk-to-pem')(key, {'private': true});
const sign = require('crypto').createSign('sha256');
sign.update(dataBuffer);
return sign.sign(key);
Run Code Online (Sandbox Code Playgroud)
这里我得到一个可变长度的缓冲区,大约70个字节; 它没有交叉验证jsrsa(抱怨rs签名的长度无效).
我怎样才能得到一个RS签名,通过所产生jsrsasign和SubtleCrypto使用节点crypto …
我的React Native构建突然失败并出现错误,尽管一天前工作正常但没有任何相关的更改.
FAILURE: Build failed with an exception.
* What went wrong: A problem occurred configuring project ':react-native-document-scanner'.
> Could not resolve all artifacts for configuration ':react-native-document-scanner:classpath'.
> Could not find lint-gradle-api.jar (com.android.tools.lint:lint-gradle-api:26.1.2).
Searched in the following locations:
https://jcenter.bintray.com/com/android/tools/lint/lint-gradle-api/26.1.2/lint-gradle-api-26.1.2.jar
Run Code Online (Sandbox Code Playgroud)
之前曾多次提出过类似的问题,但通常的解决方案是添加google()到该repositories部分.然而
repositories部分已包含google()google() 已经出现了 jcenter()片段来自build.gradle:
buildscript {
repositories {
// ...
google()
maven { url 'https://maven.google.com' }
mavenLocal()
mavenCentral()
maven { url "https://jitpack.io" }
jcenter()
}
}
// ...
allprojects { …Run Code Online (Sandbox Code Playgroud)