标签: digest

如何使用Node.JS请求HTTP Digest auth?

我必须用Node.JS编写一些代码来获取API文档,但是我在最近几天尝试了我在网上找到的所有解决方案(包括Stack当然)都没有成功...

我的API使用HTTP Digest Auth,这就是问题,我能够连接,这不是什么大问题,但每次我得到相同的回报:

Got response : 401
HTTP Digest Authentication required for "api.example.com"
Run Code Online (Sandbox Code Playgroud)

你可以在没有auth的情况下显示我的基本代码!因为我做了所有的尝试后我不知道自己能做什么:

var http = require('http')

var options = {
    host: 'api.example.com',
    path: '/example/1.xml',
};

var request = http.get(options, function(res){
    var body = "";
    res.on('data', function(data){
        body += data;
    })
    res.on('end', function(){
        console.log('Got response : ' + res.statusCode);
        console.log(body);
    })
    res.on('error', function(e){
        console.log('Got error : ' +e.message);
    });
});
Run Code Online (Sandbox Code Playgroud)

我最后一次尝试是使用这个模块https://npmjs.org/package/request但是每次我得到401时他都不会工作!

有关更多信息,我能够使用Ruby,Python,php和Java连接并获取我需要的API信息,因此我确信我的API运行良好,并且我传递的信息是正确的.我使用Node v0.10.11的最后一个稳定版!

如果有人可以帮助我或找到解决方案,我会很高兴.

编辑:我将使用模块Mickael/request添加有关我的测试的一些细节

第一次尝试 :

var request = require('request')

var options = …
Run Code Online (Sandbox Code Playgroud)

httprequest digest digest-authentication http-digest node.js

9
推荐指数
1
解决办法
1万
查看次数

什么["string"].pack('H*')是什么意思?

我需要将一些Ruby代码翻译成JavaScript并遇到以下函数:

def sha1_hex(h)
  Digest::SHA1.hexdigest([h].pack('H*'))
end
Run Code Online (Sandbox Code Playgroud)

[h].pack('H*')在这种情况下究竟意味着什么?它将如何转换为JavaScript?

ruby hex digest

9
推荐指数
1
解决办法
8614
查看次数

有没有办法在每个$ http.get上禁用$ digest的触发?

背景

angular的$http服务正在触发$digest每一个get(如果没有$digest已经运行):

if (!$rootScope.$$phase) $rootScope.$apply();  
Run Code Online (Sandbox Code Playgroud)

除了从我们的API中获取对象之外,我们的应用程序还有许多指令templateUrl- 通过角度使用获取$http.这会导致数以百计$digest冷启动循环.

注释出上述线,减少的数量$digest的循环至约3,和应用程序运行MUCH快,没有破碎的绑定(至少由于$http不触发$digest).

有没有办法禁用$ http触发$ digest?

javascript http digest angularjs

9
推荐指数
1
解决办法
1056
查看次数

使用C程序验证使用私钥签名的摘要

我将解释到目前为止我所做的所有步骤,并以我的问题结束.

使用OpenSSL 1.0.1e-fips 2013年2月11日

生成私钥和公钥

openssl genrsa -des3 -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
Run Code Online (Sandbox Code Playgroud)

使用摘要和私钥签名消息

openssl dgst -sha256 -sign private.pem -out message.secret message.txt
Run Code Online (Sandbox Code Playgroud)

在这一点上,我有一个公钥,一个签名的消息(带摘要)和原始消息.

第1部分 - 使用CLI(这个工作)

使用CLI我设法验证摘要:

openssl dgst -sha256 -verify public.pem -signature message.secret message.txt
Run Code Online (Sandbox Code Playgroud)

我将"已验证"作为返回值.

第2部分 - 使用C程序

我的程序看起来像这样:

哪里:

msg是message.txt

签名是message.secret

pkey是公钥(使用PEM_read_PUBKEY实现)

int verify_it(const byte* msg, size_t msg_len, byte* signature, EVP_PKEY* pkey) {
    EVP_MD_CTX      *ctx;
    size_t          sig_len;
    int             bool_ret;
    int             ret_val;

    ret_val = EXIT_SUCCESS;
    ctx = NULL;

    do
    {
        ctx = …
Run Code Online (Sandbox Code Playgroud)

c openssl digest

9
推荐指数
1
解决办法
5747
查看次数

与铁定和弹性流一起散步

我正在尝试在我正在使用的Common Lisp应用程序中散列一些字符串.sd-sha1包似乎不受支持,并且已经有一段时间由CLiki页面判断,这建议使用Ironclad.很公平,

=> (require 'ironclad)
NIL
Run Code Online (Sandbox Code Playgroud)

Ironclad虽然不做字符串摘要; 这是在其项目页面上声明的有意设计选择,我应该做的是将我的字符串转换为字节字符串并哈希.换一种说法

=> (ironclad:digest-sequence
      :sha1 (flexi-streams:string-to-octets "Hello there"))
#(114 108 118 85 62 26 63 222 162 145 52 243 110 106 242 234 5 236 92 206)
Run Code Online (Sandbox Code Playgroud)

好吧,现在的问题是,整个练习的要点是找出原始字符串输入的sha1-hashed字符串,这意味着我真的想将上面的字符串转换为字符串格式.但,

=> (flexi-streams:octets-to-string 
     (ironclad:digest-sequence
        :sha1 (flexi-streams:string-to-octets "Hello there"))
     :external-format :utf-8)

This sequence can't be decoded using UTF-8 as it is too short.  
1 octet missing at then end.
     [Condition of type FLEXI-STREAMS:EXTERNAL-FORMAT-ENCODING-ERROR]

Restarts:
     0: [ABORT] Exit debugger, returning to top level.
Run Code Online (Sandbox Code Playgroud)

另一种选择是flexi-streams推断正确的编码.

=> (flexi-streams:octets-to-string …
Run Code Online (Sandbox Code Playgroud)

common-lisp digest ironclad

8
推荐指数
1
解决办法
802
查看次数

轻量级8字节散列函数算法

我需要从一个可变长度的字符串中提取一个8字节的摘要,所以我正在寻找一个我将在c/c ++中实现的算法.这将是微控制器上数字签名程序的一部分,因此它必须是:

  • 只需几行代码即可写入,因为固件必须尽可能少地保存;
  • 资源消耗低,特别是ram(最好小于100字节);
  • 足够强大,在字符串的任何一点更改单个字符都会改变整体摘要.

我看了一下现有的算法,比如crc64,但它们对我的平台来说似乎太重了.

c c++ hash digest

8
推荐指数
2
解决办法
1万
查看次数

MessageDigest SHA-512与openssl不同

我无法弄清楚我在这里做错了什么.我有以下代码:

byte[] digest = new byte[0];
MessageDigest md = null;
try{
    md = MessageDigest.getInstance( "SHA-512" );
}
catch( NoSuchAlgorithmException e ) {
    return digest;
}
digest = md.digest( myString.getBytes() );
Run Code Online (Sandbox Code Playgroud)

查看NetBeans调试器中摘要byte []的十六进制值,它显示的内容与输出的不同:

echo "myString" | openssl dgst -sha512
Run Code Online (Sandbox Code Playgroud)

我猜这是一个字符编码问题,但是JVM和openssl是否使用了该机器的默认字符集?

任何帮助表示赞赏.

java message openssl sha digest

7
推荐指数
1
解决办法
2446
查看次数

Javascript摘要手动身份验证

我阅读了有关摘要认证的所有帖子,我正在尝试,但我有任何问题,我有一个实施摘要认证的restlet,并与javascript api我正在尝试进行身份验证.

首先,我对服务器执行xmlhttprequest POST(从file://到localhost:8111,因此我遇到了CORS问题但是已经解决了),以及服务器响应401和WWW-Authenticate标头:

WWW-Authenticate:Digest realm="Guard", domain="/",        nonce="MTMzOTA5Mjk1NTE2NDo0NzY2NjJiOTgyMjE1ZDc0OWU3NzM5MTkzMWNjNGQzNw==", algorithm=MD5, qop="auth"
Run Code Online (Sandbox Code Playgroud)

所以我采用这个标题并应用身份验证摘要算法:首先创建2个变量,"cnonce"和"nc":

tokensObj["cnonce"] = 'bd5fd9b093dccaa1'; (invented)
tokensObj["nc"] = '00000001';
Run Code Online (Sandbox Code Playgroud)

我在我的文字对象中创建'uri'参数(在服务器响应中有一个"域":?)我取'domain'的值并放入我的对象的'uri'键.

之后,我做了算法:

var HA1 = MD5("login:Guard:mypassword");
var HA2 = MD5("POST:/");
var authResponse = MD5(HA1 + ':' + 

        unquotes(tokensObj["nonce"]) +
        ':' +
        tokensObj["nc"] +
        ':' +
        tokensObj["cnonce"] +
        ':' +
                    unquotes(tokensObj["qop"]) +
        ':' +
        HA2);
var responseContentHeader = 'Digest username:"login"' +', realm=' + tokensObj["realm"] +
                           ', nonce=' + tokensObj["nonce"] +
                           ', uri=' + tokensObj["domain"]  +
               ', algorithm=' + tokensObj["algorithm"] +
               ', response="' + …
Run Code Online (Sandbox Code Playgroud)

javascript xmlhttprequest digest digest-authentication

7
推荐指数
1
解决办法
5283
查看次数

为什么我新建的码头工人没有摘要?

我一直在这里关注Docker教程,并通过对现有图像进行更改并使用三个不同标签对其进行标记,在我的本地OSX计算机上构建测试图像:

# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
adamatan/sinatra         devel               fccb6b4d21b4        8 minutes ago       469.5 MB
adamatan/sinatra         junk                fccb6b4d21b4        8 minutes ago       469.5 MB
adamatan/sinatra         latest              fccb6b4d21b4        8 minutes ago       469.5 MB
Run Code Online (Sandbox Code Playgroud)

但是,这些图像都没有摘要:

# docker images --digests adamatan/sinatra
REPOSITORY          TAG                 DIGEST              IMAGE ID            CREATED             SIZE
adamatan/sinatra    devel               <none>              fccb6b4d21b4        9 minutes ago       469.5 MB
adamatan/sinatra    junk                <none>              fccb6b4d21b4        9 minutes ago       469.5 MB
adamatan/sinatra    latest              <none>              fccb6b4d21b4        9 minutes ago       469.5 MB
Run Code Online (Sandbox Code Playgroud)

我用Dockerfile创建的其他测试图像确实有摘要.

为什么有些图片有摘要而有些没有?它与图像的创建方式有关(Dockerfile与否)?

digest docker

7
推荐指数
2
解决办法
1872
查看次数

使用crypto node.js库,无法快速连续多次创建SHA-256哈希

我正在创建一个自动递增数字的哈希值.我已经创建了两个示例循环,我正在尝试实现此目的.

运行#1时,第一个哈希记录到控制台,第二次迭代通过循环,返回以下错误.错误:已经调用摘要

我相信这是由于文档中的这个引用:在调用hash.digest()方法之后,不能再使用Hash对象.多次调用将导致抛出错误.

如何创建一个使用Node的加密库一次创建多个哈希的循环?

 // Reproduce #1
 const crypto = require('crypto');
 const hash = crypto.createHash('sha256');
 for (let i = 0; i < 5; i++) {
   hash.update('secret' + i);
   console.log(hash.digest('hex'));
 }
Run Code Online (Sandbox Code Playgroud)

javascript cryptography sha256 digest node.js

7
推荐指数
1
解决办法
4381
查看次数