Guest User

Untitled

a guest
Apr 11th, 2019
395
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. #include "Encrypt.h"
  2. #include "stdafx.h"
  3. #include <iostream>
  4.  
  5. static const std::string base64_chars =
  6. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  7. "abcdefghijklmnopqrstuvwxyz"
  8. "0123456789+/";
  9.  
  10.  
  11. static inline bool is_base64(unsigned char c) {
  12. return (isalnum(c) || (c == '+') || (c == '/'));
  13. }
  14.  
  15. std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
  16. std::string ret;
  17. int i = 0;
  18. int j = 0;
  19. unsigned char char_array_3[3];
  20. unsigned char char_array_4[4];
  21.  
  22. while (in_len--) {
  23. char_array_3[i++] = *(bytes_to_encode++);
  24. if (i == 3) {
  25. char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
  26. char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
  27. char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
  28. char_array_4[3] = char_array_3[2] & 0x3f;
  29.  
  30. for (i = 0; (i <4); i++)
  31. ret += base64_chars[char_array_4[i]];
  32. i = 0;
  33. }
  34. }
  35.  
  36. if (i)
  37. {
  38. for (j = i; j < 3; j++)
  39. char_array_3[j] = '\0';
  40.  
  41. char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
  42. char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
  43. char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
  44. char_array_4[3] = char_array_3[2] & 0x3f;
  45.  
  46. for (j = 0; (j < i + 1); j++)
  47. ret += base64_chars[char_array_4[j]];
  48.  
  49. while ((i++ < 3))
  50. ret += '=';
  51.  
  52. }
  53.  
  54. return ret;
  55.  
  56. }
  57.  
  58. std::string base64_decode(std::string const& encoded_string) {
  59. int in_len = encoded_string.size();
  60. int i = 0;
  61. int j = 0;
  62. int in_ = 0;
  63. unsigned char char_array_4[4], char_array_3[3];
  64. std::string ret;
  65.  
  66. while (in_len-- && (encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
  67. char_array_4[i++] = encoded_string[in_]; in_++;
  68. if (i == 4) {
  69. for (i = 0; i <4; i++)
  70. char_array_4[i] = base64_chars.find(char_array_4[i]);
  71.  
  72. char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
  73. char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
  74. char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
  75.  
  76. for (i = 0; (i < 3); i++)
  77. ret += char_array_3[i];
  78. i = 0;
  79. }
  80. }
  81.  
  82. if (i) {
  83. for (j = i; j <4; j++)
  84. char_array_4[j] = 0;
  85.  
  86. for (j = 0; j <4; j++)
  87. char_array_4[j] = base64_chars.find(char_array_4[j]);
  88.  
  89. char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
  90. char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
  91. char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
  92.  
  93. for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
  94. }
  95.  
  96. return ret;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment