fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void base64Encode(char *text, size_t length, char *reslut);
  5. void base64Decode(char *text, size_t length, char *result);
  6.  
  7. const char encodeMap[] = {
  8. 'A','B','C','D','E','F','G',
  9. 'H','I','J','K','L','M','N',
  10. 'O','P','Q','R','S','T','U',
  11. 'V','W','X','Y','Z',
  12. 'a','b','c','d','e','f','g',
  13. 'h','i','j','k','l','m','n',
  14. 'o','p','q','r','s','t','u',
  15. 'v','w','x','y','z',
  16. '0','1','2','3','4','5','6','7','8','9',
  17. '+','/'
  18. };
  19. const char decodeMap[] = {
  20. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  21. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  22. 0,0,0,0,0,0,0,0,0,0,0,62,0,0,0,63,
  23. 52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,
  24. 0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,
  25. 15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,
  26. 0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
  27. 41,42,43,44,45,46,47,48,49,50,51,0,0,0,0,0
  28. };
  29.  
  30. int main(void) {
  31. char testText[] = "ABCDEFG";
  32.  
  33. char encodedText[1024];
  34. base64Encode(testText, strlen(testText), encodedText);
  35. printf("encoded:%s\n", encodedText);
  36.  
  37.  
  38. char decodedText[1024];
  39. base64Decode(encodedText, strlen(encodedText), decodedText);
  40. printf("decoded:%s\n", decodedText);
  41.  
  42. return 0;
  43. }
  44.  
  45. void base64Encode(char *text, size_t length, char *result) {
  46. int i;
  47.  
  48. for (i = 0; i < length; i += 3) {
  49. result[(i / 3) * 4] = encodeMap[text[i] >> 2 & 0x3F];
  50. result[(i / 3) * 4 + 1] = encodeMap[text[i] << 4 & 0x30 | text[i + 1] >> 4 & 0x0F];
  51. result[(i / 3) * 4 + 2] = encodeMap[text[i + 1] << 2 & 0x3C | text[i + 2] >> 6 & 0x03];
  52. result[(i / 3) * 4 + 3] = encodeMap[text[i + 2] & 0x3F];
  53. }
  54.  
  55. if (length % 3 == 1)
  56. result[((length - 1) / 3 + 1) * 4 - 2] = '=';
  57. if (length % 3 == 1 || length % 3 == 2)
  58. result[((length - 1) / 3 + 1) * 4 - 1] = '=';
  59.  
  60. result[((length - 1) / 3 + 1) * 4] = '\0';
  61. }
  62.  
  63. void base64Decode(char *text, size_t length, char *result) {
  64. int i;
  65.  
  66. for (i = 0; i < length; i += 4) {
  67. result[(i / 4) * 3] = decodeMap[text[i]] << 2 & 0xFC | decodeMap[text[i + 1]] >> 4 & 0x03;
  68. result[(i / 4) * 3 + 1] = decodeMap[text[i + 1]] << 4 & 0xF0 | decodeMap[text[i + 2]] >> 2 & 0x0F;
  69. result[(i / 4) * 3 + 2] = decodeMap[text[i + 2]] << 6 & 0xC0 | decodeMap[text[i + 3]] & 0x3F;
  70. }
  71.  
  72. result[((length - 1) / 4 + 1) * 3] = '\0';
  73. }
Success #stdin #stdout 0s 9432KB
stdin
Standard input is empty
stdout
encoded:QUJDREVGRw==
decoded:ABCDEFG