index.uts 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. /* 引入 interface.uts 文件中定义的变量 */
  2. import { CommonSync, sm4Sync, ivSync, rsaSync, KeyType, rsaCommonSync, rsaValidate, sm2Validate, hexSync } from '../interface.uts';
  3. export { KeyType }
  4. /**
  5. * 引入三方库
  6. */
  7. import MD5Util from 'cn.mtjsoft.lib_encryption.MD5.MD5Util';
  8. import Base64Util from 'cn.mtjsoft.lib_encryption.BASE64.Base64Util';
  9. import AESUtil from 'cn.mtjsoft.lib_encryption.AES.AESUtil';
  10. import Util from 'cn.mtjsoft.lib_encryption.utils.Util';
  11. import SHAUtil from 'cn.mtjsoft.lib_encryption.SHA.SHAUtil';
  12. import RSAUtil from 'cn.mtjsoft.lib_encryption.RSA.RSAUtil';
  13. import SM2Util from 'cn.mtjsoft.lib_encryption.SM2.SM2Util';
  14. import SM3Util from 'cn.mtjsoft.lib_encryption.SM3.SM3Util';
  15. import SM4Util from 'cn.mtjsoft.lib_encryption.SM4.SM4Util';
  16. import KeyPair from 'java.security.KeyPair';
  17. import Cipher from 'javax.crypto.Cipher';
  18. import IvParameterSpec from 'javax.crypto.spec.IvParameterSpec';
  19. import SecretKeySpec from 'javax.crypto.spec.SecretKeySpec';
  20. import Mac from 'javax.crypto.Mac';
  21. /**
  22. * 同步方法
  23. *
  24. * uni-app项目中(vue/nvue)调用示例:
  25. * 1、引入方法声明 import { md5Sync,base64EncodeSync,base64DecodeSync } from "@/uni_modules/tq-encrypt"
  26. * 2、方法调用 md5Sync('123456') base64EncodeSync("212321")
  27. *
  28. * uni-app x项目(uvue)中调用示例:
  29. * 1、引入方法及参数声明 import { md5Sync,base64EncodeSync,base64DecodeSync } from "@/uni_modules/tq-encrypt";
  30. * 2、方法调用 md5Sync('123456') base64DecodeSync("MjEyMzIx")
  31. */
  32. // md5加密
  33. export const md5Sync : CommonSync = function (md5Str : string) : string {
  34. const res : string = MD5Util.stringMD5(md5Str);
  35. return res;
  36. }
  37. // base64加密
  38. export const base64EncodeSync : CommonSync = function (str : string) : string {
  39. const res : string = Base64Util.encode(str.toByteArray());
  40. return res;
  41. }
  42. // base64解密
  43. export const base64DecodeSync : CommonSync = function (str : string) : string {
  44. const res : string = String(Base64Util.decode(str));
  45. return res;
  46. }
  47. // AES对称加密
  48. export function aesEncryptSync(dataString : string, keyAES : string, isHex: boolean = false) : string {
  49. if (isHex) {
  50. const encrypt = AESUtil.encrypt(dataString.toByteArray(), Util.hexStr2Bytes(keyAES));
  51. const res : string = Util.byte2HexStr(encrypt);
  52. return res;
  53. } else{
  54. const byteContent = dataString.toByteArray();
  55. const enCodeFormat = keyAES.toByteArray();
  56. const secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
  57. const cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
  58. cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
  59. const encryptedBytes = cipher.doFinal(byteContent);
  60. // 同样对加密后数据进行 base64 编码
  61. return Base64Util.encode(encryptedBytes);
  62. }
  63. }
  64. // AES对称解密
  65. export function aesDecryptSync(dataString : string, keyAES : string, isHex: boolean = false) : string {
  66. if (isHex) {
  67. const res : string = String(AESUtil.decrypt(Util.hexStr2Bytes(dataString), Util.hexStr2Bytes(keyAES)));
  68. return res;
  69. } else{
  70. const encryptedBytes = Base64Util.decode(dataString);
  71. const enCodeFormat = keyAES.toByteArray();
  72. const secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
  73. const cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
  74. cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
  75. const result = cipher.doFinal(encryptedBytes);
  76. return String(result);
  77. }
  78. }
  79. // SHA1加密
  80. export const sha1Sync : CommonSync = function (str : string) : string {
  81. const res : string = SHAUtil.stringSHA(str, SHAUtil.SHA1);
  82. return res;
  83. }
  84. // SHA256加密
  85. export const sha256Sync : CommonSync = function (str : string) : string {
  86. const res : string = SHAUtil.stringSHA(str, SHAUtil.SHA256);
  87. return res;
  88. }
  89. // SM2非对称加密密钥
  90. export const sm2KeyPair = function () : string[] {
  91. let arr: Array<string> = [];
  92. const dom = SM2Util.generateKeyPair();
  93. arr.push(Util.byte2HexStr(dom[0]))
  94. arr.push(Util.byte2HexStr(dom[1]))
  95. return arr;
  96. }
  97. // 国产SM2非对称公钥加密
  98. export const sm2EncryptSync : sm4Sync = function (dataString : string, publicKey : string) : string {
  99. const encryptByPublicKey = SM2Util.encrypt(Util.hexStr2Bytes(publicKey), dataString.toByteArray());
  100. return Util.byte2HexStr(encryptByPublicKey);
  101. }
  102. // 国产SM2非对称私钥解密
  103. export const sm2DecryptSync : sm4Sync = function (dataString : string, privateKey : string) : string {
  104. return String(SM2Util.decrypt(Util.hexStr2Bytes(privateKey), Util.hexStr2Bytes(dataString)));
  105. }
  106. // sm2签名
  107. export const sm2PubSignSync : sm4Sync = function (dataString : string, privateKey : string) : string {
  108. const sign = SM2Util.sign(Util.hexStr2Bytes(privateKey), Util.hexStr2Bytes(dataString));
  109. return Util.byte2HexStr(sign);
  110. }
  111. // sm2验签
  112. export const sm2PubSignValSync : sm2Validate = function (dataString : string, publicKey : string, sign : string) : boolean {
  113. const verifySign = SM2Util.verifySign(Util.hexStr2Bytes(publicKey), Util.hexStr2Bytes(dataString), Util.hexStr2Bytes(sign));
  114. return verifySign;
  115. }
  116. // 国产SM3加密
  117. export const sm3EncryptSync : CommonSync = function (dataString : string) : string {
  118. const res : string = SM3Util.encryptInner(dataString);
  119. return res;
  120. }
  121. // 国产SM4CBC加密
  122. export const sm4CBCEncryptSync : ivSync = function (dataString : string, keySM4 : string, iv: string) : string {
  123. const res : string = Util.byte2HexStr(SM4Util.encrypt(dataString.toByteArray(), Util.hexStr2Bytes(keySM4), SM4Util.SM4_CBC_PKCS5, Util.hexStr2Bytes(iv)))
  124. return res;
  125. }
  126. // 国产SM4ECB加密
  127. export const sm4ECBEncryptSync : sm4Sync = function (dataString : string, keySM4 : string) : string {
  128. const res : string = Util.byte2HexStr(SM4Util.encrypt(dataString.toByteArray(), Util.hexStr2Bytes(keySM4), SM4Util.SM4_ECB_PKCS5, null))
  129. return res;
  130. }
  131. // 国产SM4CBC解密
  132. export const sm4CBCDecryptSync : ivSync = function (dataString : string, keySM4 : string, iv: string) : string {
  133. const res : string = String(SM4Util.decrypt(Util.hexStr2Bytes(dataString), Util.hexStr2Bytes(keySM4), SM4Util.SM4_CBC_PKCS5, Util.hexStr2Bytes(iv)))
  134. return res;
  135. }
  136. // 国产SM4ECB解密
  137. export const sm4ECBDecryptSync : sm4Sync = function (dataString : string, keySM4 : string) : string {
  138. const res : string = String(SM4Util.decrypt(Util.hexStr2Bytes(dataString), Util.hexStr2Bytes(keySM4), SM4Util.SM4_ECB_PKCS5, null))
  139. return res;
  140. }
  141. // RSA非对称加密
  142. export const getKeyPair = function () : KeyPair {
  143. return RSAUtil.generateRSAKeyPair();
  144. }
  145. // 生成KeyPair密钥
  146. export function generateKeyPair(pubStr:string,privateStr:string): KeyPair{
  147. const publicKey = RSAUtil.getPublicKey(Util.hexStr2Bytes(pubStr))
  148. const privateKey = RSAUtil.getPrivateKey(Util.hexStr2Bytes(privateStr))
  149. return KeyPair(publicKey,privateKey)
  150. }
  151. export const rsaEncryptSync : rsaSync = function (dataString : string, keyPair : KeyPair, type : KeyType) : string {
  152. let res : string;
  153. if (type === KeyType.PUB) {
  154. res = Util.byte2HexStr(RSAUtil.encryptByPublicKey(dataString.toByteArray(), keyPair.public))
  155. } else {
  156. res = Util.byte2HexStr(RSAUtil.encryptByPrivateKey(dataString.toByteArray(), keyPair.private))
  157. }
  158. return res;
  159. }
  160. // RSA非对称解密
  161. export const rsaDecryptSync : rsaSync = function (dataString : string, keyPair : KeyPair, type : KeyType) : string {
  162. let res : string;
  163. if (type === KeyType.PUB) {
  164. res = String(RSAUtil.decryptByPublicKeyKey(Util.hexStr2Bytes(dataString), keyPair.public))
  165. } else {
  166. res = String(RSAUtil.decryptByPrivateKey(Util.hexStr2Bytes(dataString), keyPair.private))
  167. }
  168. return res;
  169. }
  170. // RSA SHA256签名
  171. export const rsaSHA256PrivateSync : rsaCommonSync = function (dataString : string, keyPair : KeyPair) : string {
  172. const res : string = Util.byte2HexStr(RSAUtil.signWithSHA256(dataString.toByteArray(), keyPair.private))
  173. return res;
  174. }
  175. // RSA MD5签名
  176. export const rsaMD5PrivateSync : rsaCommonSync = function (dataString : string, keyPair : KeyPair) : string {
  177. const res : string = Util.byte2HexStr(RSAUtil.signWithMD5(dataString.toByteArray(), keyPair.private))
  178. return res;
  179. }
  180. // RSA SHA256签名验签
  181. export const rsaSHA256PubValSync : rsaValidate = function (dataString : string,result: string, keyPair : KeyPair) : boolean {
  182. const res : boolean = RSAUtil.verifySignWithSHA256(dataString.toByteArray(),Util.hexStr2Bytes(result), keyPair.public)
  183. return res;
  184. }
  185. // RSA MD5签名验签
  186. export const rsaMD5PubValSync : rsaValidate = function (dataString : string,result: string, keyPair : KeyPair) : boolean {
  187. const res : boolean = RSAUtil.verifySignWithMD5(dataString.toByteArray(),Util.hexStr2Bytes(result), keyPair.public)
  188. return res;
  189. }
  190. // AES CBC对称加密
  191. export const aesCBCEncryptSync : ivSync = function (dataString : string, key : string, iv: string) : string {
  192. const byteContent = dataString.toByteArray();
  193. const enCodeFormat = key.toByteArray();
  194. const secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
  195. const initParam = iv.toByteArray();
  196. const ivParameterSpec = new IvParameterSpec(initParam);
  197. const cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  198. cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
  199. const encryptedBytes = cipher.doFinal(byteContent);
  200. // 同样对加密后数据进行 base64 编码
  201. return Base64Util.encode(encryptedBytes);
  202. }
  203. // AES CBC对称解密
  204. export const aesCBCDecryptSync : ivSync = function (dataString : string, key : string, iv: string) : string {
  205. const encryptedBytes = Base64Util.decode(dataString);
  206. const enCodeFormat = key.toByteArray();
  207. const secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
  208. const initParam = iv.toByteArray();
  209. const ivParameterSpec = new IvParameterSpec(initParam);
  210. const cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  211. cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
  212. const result = cipher.doFinal(encryptedBytes);
  213. return String(result);
  214. }
  215. // hmacSHA1加密
  216. export const hmacSHA1Sync : sm4Sync = function (plaintext : string, key : string) : string {
  217. const byteContent = plaintext.toByteArray();
  218. const enCodeFormat = key.toByteArray();
  219. const secretKeySpec = new SecretKeySpec(enCodeFormat, "HmacSHA1");
  220. const mac = Mac.getInstance("HmacSHA1");
  221. mac.init(secretKeySpec);
  222. const hmacBytes = mac.doFinal(byteContent);
  223. return Util.byte2HexStr(hmacBytes)
  224. }