GMSm4Utils.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. //
  2. // GMSm4Utils.h
  3. //
  4. // Created by lifei on 2019/7/30.
  5. // Copyright © 2019 lifei. All rights reserved.
  6. /**
  7. * ECB 电子密码本模式,密文分割成长度相等的块(不足补齐),逐个块加密。
  8. * CBC 密文分组链接模式,前一个分组的密文和当前分组的明文异或或操作后再加密。
  9. * SM4 加密需要 16 位对齐,若原文长度不是 16 的倍数,则需补齐 Padding。
  10. * Padding 规则:采用 PKCS7Padding 补码方式,末位肯定是填充的长度。
  11. * 填充长度为 1-16 位,加密字符长度 len,填充长度 = 16 - len % 16。
  12. * Hex 代表 16 进制,加密密文为 Hex 编码字符串格式。
  13. */
  14. #import <Foundation/Foundation.h>
  15. NS_ASSUME_NONNULL_BEGIN
  16. @interface GMSm4Utils : NSObject
  17. /// 生成 SM4 密钥。返回值:长度为 32 字节 Hex 编码格式字符串密钥
  18. + (nullable NSString *)createSm4Key;
  19. ///MARK: - SM4 字符串加解密
  20. /// SM4 字符串加密。返回值:加密后的字符串,Hex 编码格式
  21. /// CBC 模式需传入 32 字节 Hex 编码格式 ivec 字符串
  22. /// @param plaintext 待加密的字符串
  23. /// @param key SM4 密钥,长度 32 字节 Hex 编码格式字符串
  24. + (nullable NSString *)ecbEncryptText:(NSString *)plaintext key:(NSString *)key;
  25. + (nullable NSString *)cbcEncryptText:(NSString *)plaintext key:(NSString *)key IV:(NSString *)ivec;
  26. /// SM4 字符串解密。返回值:解密后的明文
  27. /// CBC 模式需传入 32 字节 Hex 编码格式 ivec 字符串
  28. /// @param ciphertext 密文(Hex 编码格式)
  29. /// @param key SM4 密钥,长度 32 字节 Hex 编码格式字符串
  30. + (nullable NSString *)ecbDecryptText:(NSString *)ciphertext key:(NSString *)key;
  31. + (nullable NSString *)cbcDecryptText:(NSString *)ciphertext key:(NSString *)key IV:(NSString *)ivec;
  32. ///MARK: - SM4 Data 加解密
  33. /// SM4 文件加密。返回值:加密后的 NSData 类型密文
  34. /// CBC 模式需传入 32 字节 Hex 编码格式 ivec 字符串
  35. /// @param plainData 明文(NSData 类型)
  36. /// @param key SM4 密钥,长度 32 字节 Hex 编码格式字符串
  37. + (nullable NSData *)ecbEncryptData:(NSData *)plainData key:(NSString *)key;
  38. + (nullable NSData *)cbcEncryptData:(NSData *)plainData key:(NSString *)key IV:(NSString *)ivec;
  39. /// SM4 文件解密。返回值:解密后的 NSData 类型原文
  40. /// CBC 模式需传入 32 字节 Hex 编码格式 ivec 字符串
  41. /// @param cipherData 密文(NSData 类型)
  42. /// @param key SM4 密钥,长度 32 字节 Hex 编码格式字符串
  43. + (nullable NSData *)ecbDecryptData:(NSData *)cipherData key:(NSString *)key;
  44. + (nullable NSData *)cbcDecryptData:(NSData *)cipherData key:(NSString *)key IV:(NSString *)ivec;
  45. @end
  46. NS_ASSUME_NONNULL_END