Generate_Key_IV proc near
mov eax, [ecx]
movzx edx, ax
imul edx, 9069h
shr eax, 10h
add edx, eax
mov eax, [ecx+4]
push esi ; Here file size
movzx esi, ax
imul esi, 4650h
shr eax, 10h
add eax, esi
mov [ecx], edx
mov [ecx+4], eax
pop esi
test edx, edx
jnz short loc_495EA2
mov dword ptr [ecx], 1
loc_495EA2:
test eax, eax
jnz short loc_495EAD
mov dword ptr [ecx+4], 0FFFFFFFFh
loc_495EAD:
mov eax, [ecx]
shl eax, 10h
add eax, [ecx+4]
retn
Generate_Key_IV endp
我知道这是在汇编中,但是不幸的是我不知道它如何工作。我当然可以学习它,但是我希望那会花费很多时间,而且我不认为我会用它来弄清楚上面的意思。
所以,是的,如果有人能概述以上内容以及获取密钥和IV的方法和/或算法,我将非常感激。显示了如何使用以上代码:
我假设这只是使用密钥和IV来使用AES解码文件。但是,如果其中包含我应该知道的任何必要内容,那当然也很棒。
#1 楼
这是一个伪随机数生成器:这是一段简单的代码,其生成难以预测的值,而无需花费太长时间即可计算。查看Wikipedia文章以获取更多信息。编辑:等效的C代码类似于:
int random(unsigned int *seed)
{
int temp1;
int temp2;
temp1 = (*seed >> 16) + 36969 * (unsigned short)*seed;
temp2 = 18000 * (unsigned short)seed[1] + (seed[1] >> 16);
*seed = temp1;
seed[1] = temp2;
if (!temp1) *seed = 1;
if (!temp2) seed[1] = -1;
return seed[1] + (*seed << 16);
}
评论
尽管我很感谢您的回答,但我真正希望的是对代码执行的确切算法进行更具体的描述,以便能够将其移植到其他语言。
– puggsoy
13-10-30在10:46
@puggsoy PRNG是带进位的乘积。在Wikipedia的RNG文章中对此进行了描述。
–彼得·安德森(Peter Andersson)
13-10-30在12:38
这看起来很简单。但是,我有点困惑,这不应该产生两个值,即键和IV吗?如果需要,我可以提供一些示例值。
– puggsoy
13-10-30在20:38