小编use*_*753的帖子

MSDN HMAC-SHA1示例不起作用

使用CryptoAPI创建HMAC步骤:http://msdn.microsoft.com/en-us/library/Aa379863

  • 计算HMAC

    1. 通过调用CryptAcquireContext获取指向Microsoft加密服务提供程序(CSP)的指针.
    2. 通过调用CryptCreateHash创建HMAChash对象的句柄.在Algid参数中传递CALG_HMAC.在hKey参数中传递对称密钥的句柄.该对称密钥是用于计算HMAC的密钥.
    3. 通过调用CryptSetHashParam并将dwParam参数设置为值HP_HMAC_INFO来指定要使用的哈希类型.pbData参数必须指向初始化的HMAC_INFO结构.
    4. 调用CryptHashData开始计算数据的HMAC.第一次调用CryptHashData会导致使用XOR运算符将键值与内部字符串和数据组合在一起.对XOR操作的结果进行散列,然后对HMAC的目标数据(由对CryptHashData的调用中传递的pbData参数指向)进行哈希处理.如有必要,可以随后调用CryptHashData以完成目标数据的散列.
    5. 调用CryptGetHashParam并将dwParam参数设置为HP_HASHVAL.此调用导致内部哈希完成,外部字符串使用XOR与键组合.对XOR运算的结果进行散列,然后对内部散列(在上一步中完成)的结果进行散列.然后完成外部哈希并在pbData参数中返回,并在dwDataLen参数中返回长度.

我不能,因为我的生活让这个工作.我按顺序完成了所有步骤,但仍然无法运行我的程序.运行时出错:

Error in CryptImportKey 0x8009007
Error in CryptCreatHash 0x8009003
Error in CryptSetHashParam 0x00000057
Error in CryptHashData 0x00000057
Error in CryptGetHashParam 0x00000057
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

#include <iostream>
#include <windows.h>
#include <wincrypt.h>
using namespace std;

#define CALG_HMAC CALG_SHA1

int main()
{
//--------------------------------------------------------------------
// Declare variables.
HCRYPTPROV  hProv       = NULL;
HCRYPTHASH  hHash       = NULL;
HCRYPTKEY   hKey        = NULL;
BYTE DesKeyBlob[] = { 0x70,0x61,0x73,0x73,0x77,0x6F,0x72,0x64 };
HCRYPTHASH  hHmacHash   = NULL;
PBYTE       pbHash      = NULL;
DWORD       dwDataLen   = …
Run Code Online (Sandbox Code Playgroud)

c++ cryptography sha1 hmac hmacsha1

5
推荐指数
1
解决办法
4248
查看次数

无法理解Erlang Gen_Server架构

我正处于学习Erlang的早期阶段,我需要一些进一步的帮助.不确定这是否会受到任何阳光的影响,但在这里......我正在寻找关于该示例如何工作的流程图.

示例代码:https: //github.com/erlware/Erlang-and-OTP-in-Action-Source/blob/master/chapter_03/tr_server.erl

让我解释一下我的问题......

1> tr_server:start_link().
Run Code Online (Sandbox Code Playgroud)

我理解这一点,它调用start_link(?DEFAULT_PORT)来调用gen_server:start_link - 这实际上是一个回调给tr_server(?MODULE)init([Port])的回调.

init([Port]) ->
    {ok, LSock} = gen_tcp:listen(Port, [{active, true}]),
    {ok, #state{port = Port, lsock = LSock}, 0}.
Run Code Online (Sandbox Code Playgroud)

这也是理解的.你将数据发送到服务器,gen_server:handle_info/2被处理,因此调用,?MODULE:handle_info/2 - 它是一个案例,因为我们在?MODULE:init中返回了一个超时,它将匹配handle_info(超时,#state {lsock = LSock} =状态).

好的,这是有道理的.

这是我开始对Erlang的流程感到困惑的地方

有几天我一直在阅读这方面的在线资源(包括Erlang-and-OTP-in-action) - 这个例子来自 - 还有:http://learnyousomeerlang.com/clients-and-servers

我不确定Erlang服务器的流程如何工作.我的理解是,发送到服务器的任何消息都会被gen_server处理:handle_info/2如果它们超出范围 - 意味着它们是否未配置或匹配任何其他gen_server:handle_call/3?这意味着,gen_server会自动处理任何TCP数据:handle_info/2 - 它会回调到?MODULE:handle_info?

我不明白的是handle_call,handle_cast如何以及在何处进入服务器架构 - 我也不了解服务器从客户端 - >服务器架构的流程(直到我感到困惑).我认为这对于说明流程图非常重要,就像电路图一样.

以下是主要问题:客户端发送以下内容时服务器的流量是什么:

lists:reverse([1,2,3]).
Run Code Online (Sandbox Code Playgroud)

在纯文本中,获得流程图以了解其工作原理会很不错.从文本和示例中可以看出它的工作原理并不十分清楚.我们需要的原因尚不清楚:

get_count() ->
    gen_server:call(?SERVER, get_count).

stop() ->
    gen_server:cast(?SERVER, stop).
Run Code Online (Sandbox Code Playgroud)

我很感激任何答案,我知道解释可能很累!对不起任何语法错误!

erlang erlang-otp gen-server

4
推荐指数
2
解决办法
399
查看次数

C++ 字节到位转换然后打印

代码取自:C 语言中的字节到二进制 图片来源:BSchlinker

我修改了以下代码,使其一次占用超过 1 个字节。我修改了它,让它工作了一半,然后对我的循环感到非常困惑。:( 我花了最后一天半的时间试图弄清楚......但我的 C++ 技能并不是那么好(仍在学习!)

#include <iostream> 
using namespace std; 

char show_binary(unsigned char u, unsigned char *result,int len);

int main() 
{
    unsigned char p40[3] = {0x40, 0x00, 0x0a};
    unsigned char bits[8*(sizeof(p40))];
    int c;
    c=sizeof(p40);

    show_binary(*p40, bits, 3);
    cout << "\n\n";

    cout << "BIN = ";
    do{
        for (int i = 0; i < 8; i++)
            printf("%d",bits[i+(8*c)]);
        c++;
    }while(c < 3);

    cout << "\n";

    int a;
    cin >> a;
    return 0;
}

char show_binary(unsigned char …
Run Code Online (Sandbox Code Playgroud)

c++ byte for-loop bit-shift bit

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

标签 统计

c++ ×2

bit ×1

bit-shift ×1

byte ×1

cryptography ×1

erlang ×1

erlang-otp ×1

for-loop ×1

gen-server ×1

hmac ×1

hmacsha1 ×1

sha1 ×1