diff --git a/README.md b/README.md index 965e027..cfd122c 100644 --- a/README.md +++ b/README.md @@ -7,60 +7,21 @@ ## Before Started +### Fluwx ShareSDK_Plugin冲突 修改详情 + `fluwx` 和 `sharesdk_plugin`冲突 ,参考 [ShareSDK(分享插件)和Fluwx(微信支付插件)存在冲突](https://github.com/OpenFlutter/fluwx/blob/master/doc/QA_CN.md#sharesdk%E5%88%86%E4%BA%AB%E6%8F%92%E4%BB%B6%E5%92%8Cfluwx%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E6%8F%92%E4%BB%B6%E5%AD%98%E5%9C%A8%E5%86%B2%E7%AA%81) -由于历史原因,下面给出本项目解决方案 - -找到`./ios/.symlinks/plugin`目录 - -将其中的`fluwx`目录下的 `./ios/fluwx.podspec` 中微信相关的依赖设置为`s.dependency 'mob_sharesdk/ShareSDKPlatforms/WeChatFull'` - -``` podsepec - ... ... - s.homepage = 'https://github.com/OpenFlutter/fluwx' - s.license = { :file => '../LICENSE' } - s.author = { 'JarvanMo' => 'jarvan.mo@gmail.com' } - s.source = { :path => '.' } - s.source_files = 'Classes/**/*' - s.public_header_files = 'Classes/public/*.h' - s.static_framework = true - s.dependency 'Flutter' - # s.dependency 'WechatOpenSDK', '1.8.6.2' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/WeChatFull' - # s.dependency 'OpenWeChatSDK','~> 1.8.3+10' - # s.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/Headers/Public/#{s.name}" } - s.frameworks = ["SystemConfiguration", "CoreTelephony","WebKit"] - s.libraries = ["z", "sqlite3.0", "c++"] - s.preserve_paths = 'Lib/*.a' - s.vendored_libraries = "**/*.a" - s.ios.deployment_target = '8.0' - ... ... -``` +[fluwx fix](http://test.akuhotel.com:8099/laiiihz/fluwx) -将`sharesdk_plugin`目录中`./ios/sharesdk_plugin.podspec`中微信依赖设置为`s.dependency 'mob_sharesdk/ShareSDKPlatforms/WeChatFull'` - -``` podspec - ... ... - s.dependency 'Flutter' - s.dependency 'mob_sharesdk' - s.dependency 'mob_sharesdk/ShareSDKExtension' - s.dependency 'mob_sharesdk/ShareSDKUI' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/QQ' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/SinaWeibo' - # s.dependency 'mob_sharesdk/ShareSDKPlatforms/WeChat' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/WeChatFull' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/Facebook' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/Twitter' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/Douyin' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/Oasis' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/Line' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/SnapChat' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/WatermelonVideo' - s.dependency 'mob_sharesdk/ShareSDKPlatforms/KuaiShou' - ... ... -``` +[sharesdk_plugin](http://test.akuhotel.com:8099/laiiihz/sharesdk_plugin/commit/7e5ac4829491e386321f8533223211c1c865cf52) + +### 简单校验应用证书 + +`main.dart` 142行 + +### 明文保存证书解决方案 -注意 *⚠️ 本修改直接修改依赖文件,需要注意其他使用相同依赖的项目* +`./lib/utils/sc_encrypt_util.dart` 17,27行 ## Getting Started diff --git a/assets/keys/app_rsa_private_key.pem b/backups/keys/app_rsa_private_key.pem similarity index 100% rename from assets/keys/app_rsa_private_key.pem rename to backups/keys/app_rsa_private_key.pem diff --git a/assets/keys/server_rsa_public_key.pem b/backups/keys/server_rsa_public_key.pem similarity index 100% rename from assets/keys/server_rsa_public_key.pem rename to backups/keys/server_rsa_public_key.pem diff --git a/lib/utils/sc_encrypt_util.dart b/lib/utils/sc_encrypt_util.dart index 3a78e65..7e4973c 100644 --- a/lib/utils/sc_encrypt_util.dart +++ b/lib/utils/sc_encrypt_util.dart @@ -11,12 +11,47 @@ import 'package:encrypt/encrypt.dart'; import 'dart:convert'; import 'package:crypto/crypto.dart'; import 'package:pointycastle/asymmetric/api.dart'; -import 'package:flutter/services.dart' show rootBundle; import 'package:recook/utils/print_util.dart'; class SCEncryptUtil { - static final String _serverRSAPublicKey = "assets/keys/server_rsa_public_key.pem"; - static final String _appRSAPrivateKey = "assets/keys/app_rsa_private_key.pem"; + static final String _serverRSAPublicKey = '''-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzNWyjYe3qt4YRTDwANxD +PNLAJ9TZBuHsSqSjJM5B35fABwN3gwm5Q/SCz/6kgKTqeSgCVPFYhO/zOD6G8K7E +JLgx95ZIeAB9EkW+xrhFDDthUZAkA03zHJO6SkFKOciLFVi94BdCdGlNFlnaBBqA ++8XvCpD1V8DFc/9cpb5icZvngu8vEkwkbYceCXKUMNxoXY/E2cFe8f2tVFR5pRkQ +gRLbM70jt4yBGOD8pbuk6fcnD7ghGWgzMq/845N3wISSTp/gAQg8403Fk+8AoL+F +KgxUkjUOpPI2XrcpQm0EphuAX4J0Xvo3Hu6TEPZYyqULEXGT2Jukmh0NSkNO0F39 +xwIDAQAB +-----END PUBLIC KEY----- +'''; + static final String _appRSAPrivateKey = '''-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAwJwF6sTXsaenWVz75n991FaIYO06ArFMDRl4g3SgzegHIP3c +3o9QJ+msH90Resowk1On6E1zrVoey55sIiEMnMqxlBrLkYhMZy0hK7eDL53qZ80C +hAxANtmTWV0gPOgaaPb0xrAdDfVgVZepyBTdP8D5t7t6+0BbpHUJeqVyYfZgmLzt +FM2QFDRJ9cWcTJOGe7WVQ483i2J67VYR5hgKMdBWGYJ++6UXzA4EcwkJ/p+yngcl +p5NXZT+Spv7cni/VffmAcp1K+6P4IbRWLpoXQyWc5e9+09q1Djf9Updz2DpJ88fh +RaICRxTteZmoCpqHS2Hr1oKVRe46QlEBEwK3CwIDAQABAoIBABY668Po7Cwo+Xuq +67fyxwcW5a6qMqPU6r4oTmx9rYGWYhxAsJlPWSUCJ0eWMEpHw8t9QEfjiJJdcGh3 +5Gsb/WSrUEuTvCMT5B2Ua9ur1oxMYZ2RX9T1xQOPoR4TTYE6GLI8rouwD+pog7Hd +S084eUC+eRPno44UI3+bsnhhWA5OOhXr5JCIr0orYHoAGZTwu/zTRhnNkoCedCS2 +4WPhI2meTeP3O7wYNLhkQ94kdupDXnEOIa1XXAxB6gMeDAEq9XIcokARA48Dc1b3 +il59W+y4qqbUk5jOXTOim8uxRXIaXl8l5a5oHRYc89PdhJOyifF5KNXFForxUf+u +06K1wiECgYEA5e4M+vgFRd9GITiB1KRAYNfxa1EPjJ7WxLMxi1DUhzJ+HssCJZmc +Gr2LgmDG9iIGcfxqSrcfQcUkfnSfIkqq+Mp7fO89AhzbJL0ix5OJMAb2yQpfncBO +qkupiPMabjagW30MLBmRHKWLmR6srT1OLJreXkT6XsGFoCbd4rnGvdUCgYEA1nK1 +jCiEm1ZHSKRV70nAovJyKTvie7z+5I35iiUVxyJ2G5zY5YWkPVdPU44eKqX2xl7a +FstTI/0LTFgBzh43EQ5lXNbLPvyZ58DMiWSEkeBgZa1J8SO53gR99SzSIuTj955B +KZZG7hWfMfEDtU/VKn6W+CW0veTwFWcZHXv6sV8CgYAcoc0p/3KgpdIU1vWL5jxC +EwH0LC70gt8ZtXrI73LXtxjverY0unEu/0V9IdIE2m3VCequjSkuRn9p49nhKk0q +GATSpPQC7Fb5tze6hIvD2Eoo9Mq9WTIykKN281bqPJExc1vtre1dFNxSX/h+xjCS +62IfeRV4cT7Tl6Nv1VSDVQKBgQDBtlzIftFKgGVj+Q6nWLfqeZcmKDIuFEsrqhP/ +9f/2IesOhmBm9JGn13aQw4/8dm60Qno+nOw9Vhcen2ECD8kuXxKxClYOT5+2+THJ +6kLWgxiQwDhK2zrKksQ09IfdfWVwCERUjKsF5gIn2s6+uZ6VBETbYzQhVOyKaNcH +CzcpgQKBgCtcw+QtR+YKGBC62AabzOz+KZ+uUYH60R1Q3nbbYx4KuBVbTZPp5/yP +NDL7HaaKOvh1rUrnKh0q0yU6OJuVOw6c9Av6zph9hmfyAiovSEvyEIK6o6w34az/ ++4zt/BhRXo24dgnaYZ8a3EEpS0KnlIrgexAWhvTuMAXSeXJXy9B6 +-----END RSA PRIVATE KEY----- +'''; test() async { // int timestamp = DateTime.now().second; @@ -65,7 +100,8 @@ class SCEncryptUtil { return md5Str; } - static Future aesEncrypt({String key, String encryptString,bool log= false}) async { + static Future aesEncrypt( + {String key, String encryptString, bool log = false}) async { final iv = IV.fromLength(32); final aesKey = Key.fromUtf8(key); // 使用aes-ecb-256,PKCS7Padding 加密参数 @@ -77,23 +113,24 @@ class SCEncryptUtil { return paramsEncrypted.base64; } - - static Future aesDecrypt({String key,String decryptString,bool log = false}) async { + static Future aesDecrypt( + {String key, String decryptString, bool log = false}) async { final iv = IV.fromLength(32); final aesKey = Key.fromUtf8(key); // 使用aes-ecb-256,PKCS7Padding 加密参数 final encrypter = Encrypter(AES(aesKey, mode: AESMode.ecb)); - final decrypted = encrypter.decrypt(Encrypted.fromBase64(decryptString), iv: iv); + final decrypted = + encrypter.decrypt(Encrypted.fromBase64(decryptString), iv: iv); if (log) { DPrint.printf("AES 解密 ---- $decrypted"); } return decrypted; } - - static Future rsaEncrypt({String encryptString,bool log =false}) async { + static Future rsaEncrypt( + {String encryptString, bool log = false}) async { final parser = RSAKeyParser(); - String publicKeyString = await rootBundle.loadString(_serverRSAPublicKey); + String publicKeyString = _serverRSAPublicKey; RSAPublicKey publicKey = parser.parse(publicKeyString); final rsaEncrypter = Encrypter(RSA(publicKey: publicKey)); final rsaEncrypted = rsaEncrypter.encrypt(encryptString); @@ -103,13 +140,15 @@ class SCEncryptUtil { } return rsaEncrypted.base64; } - - static Future rsaDecrypt({String decryptString,bool log = false}) async { + + static Future rsaDecrypt( + {String decryptString, bool log = false}) async { final parser = RSAKeyParser(); - String privateKeyString = await rootBundle.loadString(_appRSAPrivateKey); + String privateKeyString = _appRSAPrivateKey; RSAPrivateKey private = parser.parse(privateKeyString); final rsaDecrypter = Encrypter(RSA(privateKey: private)); - final rsaEncrypted = rsaDecrypter.decrypt(Encrypted.fromBase64(decryptString)); + final rsaEncrypted = + rsaDecrypter.decrypt(Encrypted.fromBase64(decryptString)); if (log) { // DPrint.printf("RSA 私钥 ---- $privateKeyString"); DPrint.printf("RSA 解密 ---- $rsaEncrypted"); diff --git a/pubspec.yaml b/pubspec.yaml index 2b460a4..6d49292 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -231,8 +231,6 @@ flutter: - assets/activityImage/ - assets/recook_launch_image/ - - assets/keys/server_rsa_public_key.pem - - assets/keys/app_rsa_private_key.pem - assets/svg/ - assets/icon/ - assets/sound/recook_scan.mp3