小编Pau*_* A.的帖子

MD5哈希算法中的填充

我需要了解Md5哈希算法.我正在阅读文件,并说明

"消息被"填充"(扩展),使得它的长度(以位为单位)与448一致,模512.也就是说,消息被扩展,使得它只是64位,是512位长的倍数.即使消息的长度已经达到448,模512,也始终执行填充."

我需要理解这简单来说意味着什么,特别是448模512. MODULO这个词就是问题.我会很感激这个简单的例子.有趣的是,这是MD5哈希的第一步!:)

谢谢

hash md5

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

GCM乘法实施

我的GCM SP-800-38D文档中puting开块的乘法(Alogrithm 1)C代码这里.第11-12页.

完成代码后,我想看看是否有任何方法可以测试代码.您可以在我提供的代码下面找到附件.请注意,我使用24位块代替128位块,仅用于测试目的.如有必要,我将不胜感激.

void BLK_MUL (u8 *val_1,u8 *val_2, u8 *out_val)
{ 

    u8 xdata R_val = 0xE1;     
    u8 xdata Z_val[3],V_val[3];
    u8 mask_b   = 0x80;        
    u16 i;  u8 j;           
    bit rnd;                

    for(j=0;j<3;j++,++val_2)    
    {
        Z_val[j]=0x00;      
        V_val[j]=*val_2;    
    }       


    for(i=0;i<24;i++)
    { 
        if (*val_1 & mask_b)
        {
            for(j=0;j<3;j++)    
                Z_val[j]^=V_val[j]; 
        }
        if (!(V_val[2] & 0x01))
        {//if LSB of V_val is 0
            for(j=0;j<3;j++)
            { //V_val = rightshift(V_val)
                if (j!=0)
                    if (V_val[2-j] & 0x01)
                        V_val[3-j] |= 0x80;
                V_val[2-j]>>=1;          
            }
        }
        else
        {//if LSB of V_val is …
Run Code Online (Sandbox Code Playgroud)

encryption cryptography multiplication aes-gcm galois-field

5
推荐指数
2
解决办法
2662
查看次数

将已定义的变量插入到数组中

我不知道这是否可行,但有助于提出建议.

我有一个变量unsigned char Var_2_insert;,我有一个数组const unsigned char insert_here[4];.

该变量在运行时初始化var_2_insert = 225;.我们的想法是数组中的索引3应始终具有var_2_insert的值.所以我想尝试类似的东西

insert_here[4] = { 0x00, 0x02, 0x03, Var_2_insert};
Run Code Online (Sandbox Code Playgroud)

因此,每当我尝试读取数组时insert here,它将具有var_2_insert的当前值.现在我知道我是这样的:

#define Var_2_insert 225

这样做会顺利,但由于这个变量必须在运行时更新,我试过了

#define _VAR Var_2_insert
insert_here[4] = { 0x00, 0x02, 0x03, _VAR};
Run Code Online (Sandbox Code Playgroud)

但是不起作用.那我怎么能这样呢?我希望我的问题很清楚.

谢谢.

c arrays embedded

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

C中的枚举数组

我需要使一个数组像枚举一样工作,我可以在初始化期间更改数组中元素的索引位置.例如,我们可以有一个枚举

enum Fruit_t {
APPLES,
ORANGES,
STRAWBERRIES = 8 }
Run Code Online (Sandbox Code Playgroud)

这里,草莓而不是2,变成8.这可以在阵列中完成,而位置可以改变吗?这可能在C?如果有,请问怎么样?

任何其他可能的建议将不胜感激

让我解释我的意图

我正在使用一个函数指针数组

static BT (*data_access_typ [4])() =
{ 

    NULL,
    ARRAY,  
    STRUCT,
    dnt_cr

};
Run Code Online (Sandbox Code Playgroud)

我需要调用这个函数

(access_data[*VAL])()
Run Code Online (Sandbox Code Playgroud)

其中*VAL可以是此枚举中的任何值

enum data_access_typ    {
                        Null, array, struc, bool, bit_str, int32, unsin32, float_pt, oct_str=9, vis_str,
                        bcd=13, int8=15, int16, unsin8, unsin16, int64=20, unsin64, _enum, float32, float64,
                        date_tim, date, time, dnt_cr=225
                    };
Run Code Online (Sandbox Code Playgroud)

如果值为NULL,ARRAY,STRUCT,直到dnt_car(255),则要执行单独的函数,但我不需要所有类型.只需几个或5个功能.所以我真的不打算使用枚举(仍然试图弄清楚如何使它适用于我想做的事情).

我想要做的就是*VAL处的任何值都决定了在函数指针数组中调用哪个函数,其索引应该对应于所谓的枚举中的值.

例如,

(access_data[*VAL])()

从上面的代码中,只有当*VAL为3时它才会调用dnt_cr函数,但如果*VAL为225,我想要的是调用dnt_cr.

我希望这很清楚......

c arrays enums

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