الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ممكن تفسير عمل كود sha-1

بدأه ghith-js في 29 أكتوبر 2012 · 0 رد · 340 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1

سلام عليكم اذا امكن تفسير عمل الكود وطريقة عمل sha-1 ولكم جزيل الشكر

#include "stdio.h"
#include "stdlib.h"
#define kr 1000 
union u{
	unsigned long h2;
	char h3[4];
} uu;
char M[12] = {"Work for PK"};
unsigned long q, b, p, x, y, a;
unsigned long p1, mp[kr];
unsigned long k, r,h1, s, h_1;
unsigned long u1, u2, v, v1;
int i, j, j1;
/////////////////////
int simple(unsigned long m, int k){
	unsigned long n;
	int k1, pr;
	k1 = k;
	k1--; pr = 0;
	while( k1 >= 0){
		n = mp[k1];
		n = m % n;
		if(n == 0){
			pr = 0;
			return pr;
		}
		else
			pr++;
		k1--;
	}
	mp[k] = m;
	return pr;
}
////////////////////////
void m_simple(){
	unsigned long m;
	i = 2;
	j = 3;
	while(j < kr){
		m = mp[j-1];
		m++;
		while(!simple(m,j)){
			m++;
		}
		j++;
	}
}
//////////////////////////////
void p_q_a(){
	unsigned long mn;
	unsigned long k1;
	a = 2;
	do{
		mn = 1; k1 = 1;
		while(k1 != q){
			mn *= a;
			k1++;
		}
		a++;
	}while((mn % p) != 1);
	return;
}
/////////////////////////////
unsigned int hash(char A){
	unsigned int h, g;
	h = g = 0;
	h = (h << 4) + A;
	if( g == (h & 0xF0000000)){
		h = h ^ (g >> 24);
		h = h ^ g;
		h = h % 211;
	}
	return h;
}

////////////////////////////////
void main(){
	int pp1;
	unsigned long p1;
	for(i = 0; i < 12; i++){
		printf("%c ", M);
	}
	printf("\n");
	mp[0] = 2; mp[1] = 3; mp[2] = 5;
	m_simple();
	printf("Vvedite celoe chislo, posle kotorogo mozhno  vzjat prostoe chislo\n");
	scanf("%i", &pp1);
	///////////////////////////
	p1 = pp1;
	i = 0;
	while(mp <= pp1)
		i++;
	q = mp;
	printf("q = %i \n", q);
	j = i + 1;
	while((j <= kr) && ((mp[j] % q) != 1))
		j++;
	if(j <= kr)
		p = mp[j];
	else
		return;
	printf("p = %i \n", p);
	b = p / q;
	printf("b = %i \n", b);
	p_q_a();
	printf("a = %i \n", a);
	x = rand() % q;
	printf("x = %i \n", x);
	y = 1; p1 = 1;
	while(p1 <= x){
		y *= a;
		p1++;
	}
	y = y % p;
	printf("y = %i \n", y);
	h1 = hash(M[0]);
	printf("m = %c h = %i \n", M[0], h1);
	do{
		k = rand() % q;
		r = 1; p1 = 1;
		while(p1 <= k){
			y *= a;
			p1++;
		}
		r = (y % p) % q;
		s = (k * h1 + x * r) % q;
	}while((r == 0) || (s == 0));
	printf("k = %i \n", k);
	printf("<m %c, r %i, s %i> \n", M[0], r, s);
	/////////////////////////////////
	uu.h2 = h1;
	h_1 = hash(uu.h3[0]);
	h_1 = (1 / h_1) % q;
	printf("h_1 %i \n", h_1);
	if((r < 0) || (r >= q)){
		printf("Error r");
		return;
	}
	if((s < 0) || (s >= q)){
		printf("Error s");
		return;
	}
	u1 = (s * h_1) % q;
	u2 = ((-r) * h_1) % q;
	printf("u1 = %i u2 %i \n", u1, u2);
	v = 1; p1 = 1;
	while(p1 <= u1){
		y *= a;
		p1++;
	}
	v1 = 1; p1 = 1;
	while(p1 <= u2){
		v1 *= y;
		p1++;
	}
	v = ((v * v1) % p) % q;
	if(v == r)
		printf("v %i = r %i \n", v, r);
	else
		printf("v %i <> r %i \n", v, r);
	return;
}

تم تعديل هذه المشاركة بواسطة ghith-js في 29 أكتوبر 2012 في 07:36

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…