Sec-WebSocket-Key-Generator

Author: Copyright 2024, Rajesh Kumar Nait
0 Views
0 Downloads
0 Favorites
Sec-WebSocket-Key-Generator
//+------------------------------------------------------------------+
//|                                  Sec-WebSocket-Key-Generator.mq5 |
//|                                Copyright 2024, Rajesh Kumar Nait |
//|                  https://www.mql5.com/en/users/rajeshnait/seller |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, Rajesh Kumar Nait"
#property link      "https://www.mql5.com/en/users/rajeshnait/seller"
#property version   "1.00"
#property description "Generated Sec-WebSocket-Key as described in https://datatracker.ietf.org/doc/html/rfc6455#section-11.3.3"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {
//---
   MathSrand(GetTickCount());

   // Call the function to generate and print the key
   string generatedKey = GenerateKey();
   Print("Generated Key: ", generatedKey);
}


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string Base64EncodeChar(int value) {
   string base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

   if (value >= 0 && value <= 63)
      return StringSubstr(base64Chars, value, 1);
   else
      return "=";
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string GenerateKey() {
   uchar randomBytes[16];

   // Generate 16 random bytes using MathRand
   for (int i = 0; i < ArraySize(randomBytes); i++) {
      randomBytes[i] =  MathRand() % 256;
   }

   // Base64 encode the random bytes
   string base64Key = "";
   for (int i = 0; i < ArraySize(randomBytes); i += 3) {
      int byte1 = randomBytes[i];
      int byte2 = i + 1 < ArraySize(randomBytes) ? randomBytes[i + 1] : 0;
      int byte3 = i + 2 < ArraySize(randomBytes) ? randomBytes[i + 2] : 0;

      int combinedValue = (byte1 << 16) | (byte2 << 8) | byte3;

      base64Key += Base64EncodeChar((combinedValue >> 18) & 0x3F);
      base64Key += Base64EncodeChar((combinedValue >> 12) & 0x3F);
      base64Key += i + 1 < ArraySize(randomBytes) ? Base64EncodeChar((combinedValue >> 6) & 0x3F) : "=";
      base64Key += i + 2 < ArraySize(randomBytes) ? Base64EncodeChar(combinedValue & 0x3F) : "=";
   }

   return base64Key;
}
//+------------------------------------------------------------------+

Comments