update readme file

remove pem keys
master
laiiihz 5 years ago
parent 445a94217b
commit 5d8db16f37

@ -7,60 +7,21 @@
## Before Started ## 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) `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)
由于历史原因,下面给出本项目解决方案 [fluwx fix](http://test.akuhotel.com:8099/laiiihz/fluwx)
找到`./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'
... ...
```
将`sharesdk_plugin`目录中`./ios/sharesdk_plugin.podspec`中微信依赖设置为`s.dependency 'mob_sharesdk/ShareSDKPlatforms/WeChatFull'` [sharesdk_plugin](http://test.akuhotel.com:8099/laiiihz/sharesdk_plugin/commit/7e5ac4829491e386321f8533223211c1c865cf52)
``` podspec ### 简单校验应用证书
... ...
s.dependency 'Flutter' `main.dart` 142行
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'
... ...
```
注意 *⚠️ 本修改直接修改依赖文件,需要注意其他使用相同依赖的项目* `./lib/utils/sc_encrypt_util.dart` 17,27行
## Getting Started ## Getting Started

@ -11,12 +11,47 @@ import 'package:encrypt/encrypt.dart';
import 'dart:convert'; import 'dart:convert';
import 'package:crypto/crypto.dart'; import 'package:crypto/crypto.dart';
import 'package:pointycastle/asymmetric/api.dart'; import 'package:pointycastle/asymmetric/api.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:recook/utils/print_util.dart'; import 'package:recook/utils/print_util.dart';
class SCEncryptUtil { class SCEncryptUtil {
static final String _serverRSAPublicKey = "assets/keys/server_rsa_public_key.pem"; static final String _serverRSAPublicKey = '''-----BEGIN PUBLIC KEY-----
static final String _appRSAPrivateKey = "assets/keys/app_rsa_private_key.pem"; 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 { test() async {
// int timestamp = DateTime.now().second; // int timestamp = DateTime.now().second;
@ -65,7 +100,8 @@ class SCEncryptUtil {
return md5Str; return md5Str;
} }
static Future<String> aesEncrypt({String key, String encryptString,bool log= false}) async { static Future<String> aesEncrypt(
{String key, String encryptString, bool log = false}) async {
final iv = IV.fromLength(32); final iv = IV.fromLength(32);
final aesKey = Key.fromUtf8(key); final aesKey = Key.fromUtf8(key);
// 使aes-ecb-256PKCS7Padding // 使aes-ecb-256PKCS7Padding
@ -77,23 +113,24 @@ class SCEncryptUtil {
return paramsEncrypted.base64; return paramsEncrypted.base64;
} }
static Future<String> aesDecrypt(
static Future<String> aesDecrypt({String key,String decryptString,bool log = false}) async { {String key, String decryptString, bool log = false}) async {
final iv = IV.fromLength(32); final iv = IV.fromLength(32);
final aesKey = Key.fromUtf8(key); final aesKey = Key.fromUtf8(key);
// 使aes-ecb-256PKCS7Padding // 使aes-ecb-256PKCS7Padding
final encrypter = Encrypter(AES(aesKey, mode: AESMode.ecb)); 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) { if (log) {
DPrint.printf("AES 解密 ---- $decrypted"); DPrint.printf("AES 解密 ---- $decrypted");
} }
return decrypted; return decrypted;
} }
static Future<String> rsaEncrypt(
static Future<String> rsaEncrypt({String encryptString,bool log =false}) async { {String encryptString, bool log = false}) async {
final parser = RSAKeyParser(); final parser = RSAKeyParser();
String publicKeyString = await rootBundle.loadString(_serverRSAPublicKey); String publicKeyString = _serverRSAPublicKey;
RSAPublicKey publicKey = parser.parse(publicKeyString); RSAPublicKey publicKey = parser.parse(publicKeyString);
final rsaEncrypter = Encrypter(RSA(publicKey: publicKey)); final rsaEncrypter = Encrypter(RSA(publicKey: publicKey));
final rsaEncrypted = rsaEncrypter.encrypt(encryptString); final rsaEncrypted = rsaEncrypter.encrypt(encryptString);
@ -104,12 +141,14 @@ class SCEncryptUtil {
return rsaEncrypted.base64; return rsaEncrypted.base64;
} }
static Future<String> rsaDecrypt({String decryptString,bool log = false}) async { static Future<String> rsaDecrypt(
{String decryptString, bool log = false}) async {
final parser = RSAKeyParser(); final parser = RSAKeyParser();
String privateKeyString = await rootBundle.loadString(_appRSAPrivateKey); String privateKeyString = _appRSAPrivateKey;
RSAPrivateKey private = parser.parse(privateKeyString); RSAPrivateKey private = parser.parse(privateKeyString);
final rsaDecrypter = Encrypter(RSA(privateKey: private)); final rsaDecrypter = Encrypter(RSA(privateKey: private));
final rsaEncrypted = rsaDecrypter.decrypt(Encrypted.fromBase64(decryptString)); final rsaEncrypted =
rsaDecrypter.decrypt(Encrypted.fromBase64(decryptString));
if (log) { if (log) {
// DPrint.printf("RSA 私钥 ---- $privateKeyString"); // DPrint.printf("RSA 私钥 ---- $privateKeyString");
DPrint.printf("RSA 解密 ---- $rsaEncrypted"); DPrint.printf("RSA 解密 ---- $rsaEncrypted");

@ -231,8 +231,6 @@ flutter:
- assets/activityImage/ - assets/activityImage/
- assets/recook_launch_image/ - assets/recook_launch_image/
- assets/keys/server_rsa_public_key.pem
- assets/keys/app_rsa_private_key.pem
- assets/svg/ - assets/svg/
- assets/icon/ - assets/icon/
- assets/sound/recook_scan.mp3 - assets/sound/recook_scan.mp3

Loading…
Cancel
Save