sm4.hpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #include <iostream>
  3. #include <string>
  4. #include <cmath>
  5. #include <sstream>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <algorithm>
  10. static const std::string base64_chars =
  11. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  12. "abcdefghijklmnopqrstuvwxyz"
  13. "0123456789+/";
  14. class sm4
  15. {
  16. public:
  17. static inline bool is_base64(unsigned char c)
  18. {
  19. return (isalnum(c) || (c == '+') || (c == '/'));
  20. }
  21. static std::string base64_encode(const std::string& text);
  22. static std::string base64_decode(const std::string& encoded_string);
  23. static std::string HexToStr(std::string str);
  24. static std::string StrToHex(std::string str);
  25. static std::string PKCS7(std::string str);
  26. static std::string BinToHex(std::string str);
  27. static std::string HexToBin(std::string str);
  28. static int HexToDec(char str);
  29. static std::string LeftShift(std::string str, int len);
  30. static std::string XOR(std::string str1, std::string str2);
  31. static std::string NLTransform(std::string str);
  32. static std::string LTransform(std::string str);
  33. static std::string L2Transform(std::string str);
  34. static std::string T(std::string str);
  35. static std::string T2(std::string str);
  36. static std::string KeyExtension(std::string MK);
  37. static std::string sm4_encode(std::string& hex32, std::string& key);
  38. static std::string sm4_decode(std::string& hex32, std::string& key);
  39. static std::string sm4encodestrhex(std::string text, std::string key);
  40. static std::string sm4decodehexstr(std::string cipher, std::string key);
  41. static std::string sm4encodestrbase64(std::string text, std::string key);
  42. static std::string sm4decodestrbase64(std::string base64_text, std::string key);
  43. };