Articles of 数字签名

为什么nodejs / cookie中的cookie签名使用sha1-hashing来比较签名?

我只是看着执行cryptograhic签名扩展的快递,允许创build签名的cookie。 签名函数中的mac按照此处所述进行计算: 创build一个SHA256的实例 散列数据值 创build一个base64编码的摘要 删除结尾的相等字符('=') 结果是原始值和计算出的mac的连接。 在validation签名时,值再次被签名。 但是,然后不对签名进行相等testing,但是比较由原始值和附加的mac组成的整个string: return sha1(mac) == sha1(val) ? str : false; 这里“mac”包含原来的值与一个新计算的mac连接,“val”包含传递给validation方法的inputstring(包含与原mac连接的原始值),“str”是有符号值本身。 请参阅: https : //github.com/tj/node-cookie-signature/blob/master/index.js 我本来预料只有苹果机才会被比较。 但这种情况并非如此。 为什么作者select这种实施validation的方式? 这是什么原因? 特别是:为什么他们不把字符与char1进行比较,而是对sha1进行比较?

数字签名与node.jsencryption

有人可以提供一个关于如何使用node.js实现数字签名的基本演练吗? 我GOOGLE了,但没有得到它呢。 说,我有一个API,我想签署和validation每个HTTP请求和它的响应。 这就是我目前的想象,请纠正我错在哪里: 1)我需要为客户端生成一个足够随机的密钥,用于签名请求; 2)生成的签名(通过头文件提供)是使用该string的密钥哈希encryption的,该哈希必须包括: 请求主体散列(防止篡改); 时间戳; 随机数; url; HTTP动词 然后,服务器将能够检查消息的真实性。 问题: 1)在nonce(一些随机值)和一个时间戳(我读过一个同时使用两者的post被build议)之间的上下文有什么区别? 2)我是否需要将eTag标头包含在该string中? 3)还应包括上面未列出的其他内容吗? 4)我是否应该在API服务器上保留与客户端相同的密钥,并使用它解密并检查请求,或者应该存储在API服务器上的密钥和服务器上存储的与API通信的密钥私钥 – 公钥对? 如果他们确实需要成为一个私钥 – 公钥密钥对,那么我如何使用公钥encryption私钥(反之亦然)? Plz,纠正我描述中的错误,并补充,我错过了什么。 谢谢。

使用SHA256进行签名与使用RSA-SHA256进行签名之间的区别

我使用node.js玩数字签名 出于testing目的,我创build了一些XML数据的数字签名,首先使用SHA256,然后使用RSA-SHA256。 令我感到困惑的是, 两种签名方法都创build了完全相同的签名 。 两个签名是相同的。 如果它们是相同的,那么为什么两种不同的方法(SHA256与RSA-SHA256)? 我包含下面的代码: var crypto = require('crypto'), path = require('path'), fs = require('fs'), pkey_path = path.normalize('private_key.pem'), pkey = ''; function testSignature(pkey) { var sign1 = crypto.createSign('RSA-SHA256'), sign2 = crypto.createSign('SHA256'); fs.ReadStream('some_document.xml') .on('data', function (d) { sign1.update(d); sign2.update(d); }) .on('end', function () { var s1 = sign1.sign(pkey, "base64"), s2 = sign2.sign(pkey, "base64"); […]

是否有可能使用node.js和crypto签署一个Passbook清单?

我想弄清楚如何使用node.js和crypto签署iOS Passbook pass manifest.json。 这似乎应该是可能的,但我似乎无法创build一个合适的签名。 以下是我所尝试的: var crypto = require("crypto"); var fs = require('fs'); var manifest = fs.readFileSync('manifest.json'); var pem = fs.readFileSync('passbookdemo.pem'); var key = pem.toString('ascii'); var sign = crypto.createSign('RSA-SHA256'); sign.update(manifest); var sig = sign.sign(key); fs.writeFileSync('signature'); 我之前使用以下方法生成了passbookdemo.pem: openssl pkcs12 -in passbookdemo.p12 -out passbookdemo.pem -nodes 没有与passbookdemo.pem相关的密码。 我可以看到的一个可能的问题是,在签名过程中我没有合并Apple开发者关系证书,我相信这是一个要求。 另一种可能是我在crypto.createSign('RSA-SHA256');使用了不正确的参数crypto.createSign('RSA-SHA256'); 。 我不知道我应该用什么。 下面是Apple提供的一个Ruby代码示例,我可以使用它来正确签署清单。 def sign_manifest puts "Signing the […]

从JavaScript创build一个PEM文件看起来不同于Java导致签名validation失败

我试图validation与公钥RSA签名的SHA1,我已经写了下面的Java代码完美的作品,但是JavaScript无法validation它何时使用相同的模数和由crypto或ursa创build的指数。 虽然如果我用它对Java创build的Pem文件它的作品。 任何想法或build议的Java代码转换为JavaScript的最佳方式? JAVA: import java.math.BigInteger; import java.security.KeyFactory; import java.security.Signature; import java.security.interfaces.RSAPublicKey; import java.security.spec.RSAPublicKeySpec; import java.util.Base64; public class Verify { static public Boolean verifySignature(String modulus, String exponent , String encodedMsg, String encodedSignature, String signatureAlgorithm) throws Exception { try { RSAPublicKeySpec senderPublicKeySpec = new RSAPublicKeySpec( new BigInteger(modulus, 16), new BigInteger(exponent, 16) ); RSAPublicKey rsaPublicKey = (RSAPublicKey) […]

Node.js'crypto.createSign()的有效algorithminputstring

我正在使用一个项目的节点的encryption签名,并一直在试图考虑各种algorithm的起伏。 crypto.createSign()的描述如下所示: 创build并返回使用给定algorithm的Sign对象。 在最近的OpenSSL版本中, openssl list-public-key-algorithms将显示可用的签名algorithm。 一个例子是“RSA-SHA256”。 不幸的是,“RSA-SHA256”不是openssl list-public-key-algorithms的输出值之一(如下所示)。 那么这个函数的有效值是什么,或者如何从下面的列表中提取出来? OpenSSL list result: Name: OpenSSL RSA method Type: Builtin Algorithm OID: rsaEncryption PEM string: RSA Name: rsa Type: Alias to rsaEncryption Name: OpenSSL PKCS#3 DH method Type: Builtin Algorithm OID: dhKeyAgreement PEM string: DH Name: dsaWithSHA Type: Alias to dsaEncryption Name: dsaEncryption-old Type: Alias to […]

为什么Node.js的符号和CryptographicEngine符号结果有区别?

我正在尝试使用UWP的CryptographicEngine来validationNode.js Crypto API所做的签名哈希。 由于validation方法保持返回false,我现在正在比较两个签名方法。 当我使用这两个系统签署简单的string时,我得到不同的结果。 这是Crypto JS代码: //Generate signer and hasher var signature = crypto.createSign('RSA-SHA256'); var hasher = crypto.createHash("SHA256"); hasher.update('mydata'); //Generate hash from data hashresult = hasher.digest('base64'); signature.update(hashresult); //Read private key var inputkey = fs.readFileSync('private.pem'); //Sign Data var result = signature.sign(inputkey, 'base64'); 这里是CryptographicEngine代码: IBuffer buffer = CryptographicBuffer.ConvertStringToBinary("mydata", BinaryStringEncoding.Utf8); HashAlgorithmProvider hashAlgorithm = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha256); IBuffer hashBuffer = […]

如何将phpseclib的CRYPT_RSA_SIGNATURE_PKCS1转换为节点

如何将PHP的$rsa->verifyfunction转换为节点? 我使用了这样的encryptionvalidationfunction: const crypto = require('crypto'); const verify = crypto.createVerify('RSA-SHA256'); verify.update('some data to sign'); const public_key = getPublicKeySomehow(); const signature = getSignatureToVerify(); console.log(verify.verify(public_key, signature)); 但它总是返回false。 当我通过php运行我的数据和签名时,它将返回true! 任何想法我可能做错了什么? PHPvalidationfunction如下所示: function verify($message, $signature) { if (empty($this->modulus) || empty($this->exponent)) { return false; } switch ($this->signatureMode) { case CRYPT_RSA_SIGNATURE_PKCS1: return $this->_rsassa_pkcs1_v1_5_verify($message, $signature); //case CRYPT_RSA_SIGNATURE_PSS: default: return $this->_rsassa_pss_verify($message, $signature); } […]

非对称数字签名Node.JS

我需要find一些criptographic解决scheme,它允许我使用私钥签署一些数据,并使用公钥检查签名。 如果有一些nodejs包,会很棒。 谢谢!

使用nodejs生成带有数字签名的PDF

最近,我试图通过nodejs生成pdf。 我终于find了PDFKit 。 那个库运行的很好,但是我需要实现数字签名的一部分。 但是大部分的实现都是针对JAVA或C#,比如iText或者VersyPDF。 Plz给我一些build议… thx