93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'ext/cobreak/cobreak_openssl.c', line 93
VALUE half_md5_hexdigest(VALUE self, VALUE input) {
// Convertir el valor Ruby a una cadena C
char *str = RSTRING_PTR(input);
int length = RSTRING_LEN(input); // Obtener la longitud de la cadena
unsigned char digest[MD5_DIGEST_LENGTH]; // MD5 produce un hash de 16 bytes
char out[17]; // 8 bytes * 2 para hexadecimal + 1 para el terminador
// Calcular el hash MD5
MD5((unsigned char*)str, length, digest);
// Convertir solo los primeros 8 bytes del hash a una cadena hexadecimal
for (int n = 0; n < 8; ++n) {
sprintf(&(out[n * 2]), "%02x", (unsigned int)digest[n]);
}
out[16] = '\0'; // Terminar la cadena
VALUE result = rb_str_new2(out); // Crear una nueva cadena Ruby
return result;
}
|