ToygerCryptoManager.hpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. //
  2. // BioAuthCryptoManager.hpp
  3. // BioAuthEngine
  4. //
  5. // Created by yukun.tyk on 5/16/16.
  6. // Copyright © 2016 DTF. All rights reserved.
  7. //
  8. #ifndef BioAuthCryptoManager_hpp
  9. #define BioAuthCryptoManager_hpp
  10. #import <Foundation/Foundation.h>
  11. #include <stdio.h>
  12. #import <functional>
  13. #import <Foundation/NSData.h>
  14. #import <Foundation/NSString.h>
  15. namespace DTF {
  16. /**
  17. * 业务加密结果回调
  18. *
  19. * @param success: 加密是否成功
  20. * @param cipher: 密文
  21. * @param encryptedKey: RSA公钥加密的AES密钥
  22. */
  23. typedef std::function<void(bool, NSData *, NSData *)> completionCallback;
  24. class ToygerCryptoManager{
  25. public:
  26. /**
  27. * 1. 随机生成128位AES私钥
  28. * 2. 利用ASE私钥加密业务数据
  29. * 3. 利用RSA公钥加密AES密钥
  30. *
  31. * @param content 代价密数据
  32. * @param pubKey RSA公钥
  33. * @param callback 加密成功后callback
  34. */
  35. static void mixEncrypt(NSData *content, NSString *pubKey, completionCallback callback);
  36. /**
  37. * AES加密
  38. *
  39. * @param content 业务数据
  40. * @param aesKey AES密钥
  41. *
  42. * @return 密文,失败则返回Nil
  43. */
  44. static NSData *AESEncrypt(NSData *content, NSString *aesKey ,NSUInteger value=0);
  45. //获取md5值
  46. static NSString *MD5WithData(NSData *data);
  47. /**
  48. * AES解密
  49. *
  50. * @param content 业务数据
  51. * @param aesKey AES密钥
  52. *
  53. * @return 解密后数据,失败则返回Nil
  54. */
  55. static NSData *AESDecrypt(NSData *content, NSString *aesKey);
  56. /**
  57. * 1024位RSA加密
  58. *
  59. * @param content 待加密数据,不得超过128位
  60. * @param pubKey RSA公钥
  61. *
  62. * @return 密文,失败返回nil
  63. */
  64. static NSData *RSAEncrypt(NSData *content, NSString *pubKey);
  65. /**
  66. * 检查数据签名
  67. *
  68. * @param content 业务数据
  69. * @param signature 签名信息
  70. * @param pubKey RSA公钥
  71. *
  72. * @return 签名是够正确
  73. */
  74. static BOOL checkSign(NSData *content, NSData *signature, NSString *pubKey);
  75. /**
  76. * 计算MD5
  77. *
  78. * @param str 业务数据
  79. *
  80. * @return MD5值
  81. */
  82. static NSString *calculateMD5(NSString *str);
  83. /**
  84. * 生成UUID
  85. */
  86. static NSString *generateUUID();
  87. // /**
  88. // * RC4编码
  89. // */
  90. // static NSData *RC4Crypt(NSData *data, int code);
  91. // private:
  92. /**
  93. * 生成随机字符串
  94. *
  95. * @param len 随机字符串长度,最长32个字节
  96. *
  97. * @return 生成的随机字符串
  98. */
  99. static NSString *generateToken(NSInteger len);
  100. private:
  101. static NSData *stripPublicKeyHeader(NSData *pubKey);
  102. static SecKeyRef addPublicKey(NSString *pubKey);
  103. };
  104. }
  105. #endif /* BioAuthCryptoManager_hpp */