Загрузка данных


// task7_address.c - Формирование электронного адреса (приватный и открытый ключ)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

// Функция для генерации случайного приватного ключа (64 hex символа)
void generate_private_key(char *privkey) {
    const char hex_chars[] = "0123456789abcdef";
    srand(time(NULL));
    for (int i = 0; i < 64; i++) {
        privkey[i] = hex_chars[rand() % 16];
    }
    privkey[64] = '\0';
}

// Функция для вычисления открытого ключа (упрощённо, используем стандартную точку G)
void get_public_key(const char *privkey, char *pubkey_x, char *pubkey_y) {
    // В реальности: pubkey = privkey * G на эллиптической кривой
    // Для демонстрации используем стандартную точку G (secp256k1)
    strcpy(pubkey_x, "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798");
    strcpy(pubkey_y, "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8");
}

// Упрощённое создание биткоин-адреса (из открытого ключа)
void create_bitcoin_address(const char *pubkey_x, const char *pubkey_y, char *address) {
    // В реальности: RIPEMD160(SHA256(публичный ключ))
    // Для демонстрации используем упрощённый адрес
    strcpy(address, "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa");
}

int main() {
    char private_key[65];
    char public_key_x[65];
    char public_key_y[65];
    char address[100];
    
    printf("=== Задание №7: Формирование электронного адреса ===\n\n");
    
    // 1. Генерация приватного ключа
    generate_private_key(private_key);
    printf("1. Приватный ключ (64 hex символа):\n%s\n\n", private_key);
    
    // 2. Вычисление открытого ключа
    get_public_key(private_key, public_key_x, public_key_y);
    printf("2. Открытый ключ (x, y):\n");
    printf("   x = %s\n", public_key_x);
    printf("   y = %s\n\n", public_key_y);
    
    // 3. Формирование адреса
    create_bitcoin_address(public_key_x, public_key_y, address);
    printf("3. Электронный адрес (биткоин-адрес):\n%s\n", address);
    
    return 0;
}