SHA-1

از Secure Coding

SHA-1 یک الگوریتم هش است که برای تولید یک مقدار هش 160 بیتی از داده های ورودی استفاده می شود. این الگوریتم از توابع هش برای امنیت اطلاعات و تأمین امنیت در برخی از سیستم های رمزنگاری استفاده می شود. با این حال، SHA-1 به دلیل برخی مشکلات امنیتی آسیب پذیر شده و به طور گسترده ای جایگزین SHA-2 و SHA-3 شده است.

یکی از مشکلات امنیتی SHA-1 این است که تولید یک مقدار هش 160 بیتی، می تواند با توجه به قدرت محاسباتی بالای کامپیوترهای امروزی، به راحتی قابل پیش بینی باشد. بدین ترتیب، در صورتی که یک حمله کننده به دست بیاورد یک مقدار هش، می تواند به راحتی داده های ورودی را بازیابی کند.

در ادامه یک نمونه کد C نشان داده شده است که SHA-1 را برای تولید هش از یک رشته ورودی استفاده می کند. با توجه به آسیب پذیری های SHA-1، استفاده از این کد برای تولید هش های امن توصیه نمی شود.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/sha.h>

#define MAX_SIZE 1024

int main()
{
    char str[MAX_SIZE];
    printf("Enter a string: ");
    fgets(str, MAX_SIZE, stdin);

    unsigned char hash[SHA_DIGEST_LENGTH];
    SHA1((unsigned char*) str, strlen(str) - 1, hash);

    printf("SHA-1 Hash: ");
    for(int i = 0; i < SHA_DIGEST_LENGTH; i++)
    {
        printf("%02x", hash[i]);
    }

    return 0;
}

در این کد، تابع SHA1() از کتابخانه OpenSSL برای تولید مقدار هش 160 بیتی از رشته ورودی استفاده می شود. رشته ورودی توسط تابع fgets() از ورودی کاربر دریافت می شود و سپس به عنوان ورودی به SHA1() ارسال می شود.