接口加密;添加坐标系统插入导出接口

main
chenglifeng 2 months ago
parent 03198a77bf
commit 9ee9332188
  1. 61
      app/src/main/java/com/project/survey/logic/viewmodel/CoordinateSystemViewModel.kt
  2. 50
      app/src/main/java/com/project/survey/logic/viewmodel/LoginViewModel.kt
  3. 8
      app/src/main/java/com/project/survey/model/CoordinateSystemData.kt
  4. 25
      app/src/main/java/com/project/survey/network/Api.kt
  5. 67
      app/src/main/java/com/project/survey/network/RetrofitClient.kt
  6. 2
      app/src/main/java/com/project/survey/ui/home/InstrumentFragment.kt
  7. 39
      app/src/main/java/com/project/survey/ui/instrument/coordinatesystem/fragment/CoordinateSystemContainerFragment.java
  8. 3
      app/src/main/java/com/project/survey/ui/login/LoginActivity.kt
  9. 192
      app/src/main/java/com/project/survey/util/DESUtil.java
  10. 22
      app/src/main/res/menu/menu_fragment_coordinate_system.xml
  11. 70
      app/src/main/schemas/com.project.survey.ui.instrument.setupstation.db.RecordsFixedDataBase/1.json

@ -0,0 +1,61 @@
package com.project.survey.logic.viewmodel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import blankj.utilcode.util.ActivityUtils
import com.bingce.data.base.user.UserConfig
import com.bingce.data.base.user.UserConfigConstants
import com.bingce.data.database.AppDataBase
import com.google.gson.Gson
import com.project.survey.constants.SPConstants
import com.project.survey.model.CoordinateSystemData
import com.project.survey.model.LoginBean
import com.project.survey.network.RetrofitClient
import com.project.survey.ui.login.LoginActivity
import com.project.survey.ui.project.ProjectListActivity
import com.project.survey.util.SPUtils
class CoordinateSystemViewModel : BaseViewModel() {
val api = RetrofitClient.createApiService()
val uploadCoordinateSystemResponse: LiveData<String>
get() = _uploadCoordinateSystemResponse
private val _uploadCoordinateSystemResponse = MutableLiveData<String>()
fun uploadCoordinateSystem(coordinateParameter: String) {
launch {
val res = api.uploadCoordinateSystem(coordinateParameter = coordinateParameter)
if (res.success) {
_uploadCoordinateSystemResponse.postValue(res.message)
} else {
errorResponse.postValue(res.message)
}
}
}
val downloadCoordinateSystemResponse: LiveData<CoordinateSystemData>
get() = _downloadCoordinateSystemResponse
private val _downloadCoordinateSystemResponse = MutableLiveData<CoordinateSystemData>()
fun downloadCoordinateSystem() {
launch {
val res = api.downloadCoordinateSystem()
if (res.success) {
if (res.data == null || res.data is String) {
errorResponse.postValue(res.message)
return@launch
}
try {
val gson = Gson()
val data = gson.fromJson(res.data.toString(), CoordinateSystemData::class.java)
_downloadCoordinateSystemResponse.postValue(data)
} catch (e: Exception) {
errorResponse.postValue(res.message)
}
} else {
errorResponse.postValue(res.message)
}
}
}
}

@ -7,6 +7,7 @@ import com.bingce.data.base.user.UserConfig
import com.bingce.data.base.user.UserConfigConstants
import com.bingce.data.database.AppDataBase
import com.bingce.log.BCLog
import com.google.gson.Gson
import com.project.survey.constants.EventConstants
import com.project.survey.constants.SPConstants
import com.project.survey.extend.toast
@ -59,31 +60,36 @@ class LoginViewModel : BaseViewModel() {
api.internalPersonLogin(account, password, code)
if (res.success) {
// _externalPersonSMSCodeResponse.postValue(res.data)
SPUtils.put(SPConstants.ACCOUNT, account)
SPUtils.put(SPConstants.TOKEN, res.data.token)
SPUtils.put(SPConstants.PERSON_ID, res.data.personId)
SPUtils.put(SPConstants.MOBILE_PHONE, res.data.mobilePhone)
SPUtils.put(SPConstants.PERSON_NAME, res.data.name)
var userConfig = AppDataBase.getInstance().userConfigDao().findByLeanCloudUserId(res.data.personId)
if (userConfig == null) { //创建第一个用户配置--使用默认数据目录
userConfig = UserConfig.newItem(
res.data.personId,
UserConfigConstants.VALUE_DEFAULT_DB_FOLDER
)
AppDataBase.getInstance().userConfigDao().save(userConfig)
if (res.data == null || res.data is String) {
errorResponse.postValue(res.message)
return@launch
}
try {
val gson = Gson()
val loginBean = gson.fromJson(res.data.toString(), LoginBean::class.java)
SPUtils.put(SPConstants.ACCOUNT, account)
SPUtils.put(SPConstants.TOKEN, loginBean.token)
SPUtils.put(SPConstants.PERSON_ID, loginBean.personId)
SPUtils.put(SPConstants.MOBILE_PHONE, loginBean.mobilePhone)
SPUtils.put(SPConstants.PERSON_NAME, loginBean.name)
msgEvent.postValue(Message(EventConstants.LOGIN_STATUS))
// MainActivity.start()
// 登录成功,进入工程列表页面
ProjectListActivity.start()
ActivityUtils.finishActivity(LoginActivity::class.java)
ActivityUtils.finishActivity(LoginInputCodeActivity::class.java)
var userConfig = AppDataBase.getInstance().userConfigDao()
.findByLeanCloudUserId(loginBean.personId)
if (userConfig == null) { //创建第一个用户配置--使用默认数据目录
userConfig = UserConfig.newItem(
loginBean.personId,
UserConfigConstants.VALUE_DEFAULT_DB_FOLDER
)
AppDataBase.getInstance().userConfigDao().save(userConfig)
}
// 登录成功,进入工程列表页面
ProjectListActivity.start()
ActivityUtils.finishActivity(LoginActivity::class.java)
} catch (e: Exception) {
errorResponse.postValue(res.message)
return@launch
}
} else {
errorResponse.postValue(res.message)
}

@ -0,0 +1,8 @@
package com.project.survey.model
import androidx.annotation.Keep
@Keep
data class CoordinateSystemData(
val ZBZHCS_ZHCS: String
)

@ -48,7 +48,7 @@ interface Api {
@Query("account") account: String,
@Query("password") password: String,
@Query("code") code: String
): HttpResult<LoginBean>
): HttpResult<Any?>
/**
@ -68,7 +68,7 @@ interface Api {
@Query("account") account: String,
@Query("password") password: String,
@Query("code") code: String
): HttpResult<LoginBean>
): HttpResult<Any?>
/**
* 获取用户可访问的所有项目的信息
@ -260,4 +260,25 @@ interface Api {
@Header("projectId") projectId: String = SPUtils.getString(SPConstants.PROJECT_ID),
@Body requestBody: List<LoftingPointRecordEntry>
): HttpResult<String>
/**
* 插入坐标参数
*/
@FormUrlEncoded
@POST("je/measureWork/insertCoordinateParameter")
suspend fun uploadCoordinateSystem(
// @Header("projectId") projectId: String = SPUtils.getString(SPConstants.PROJECT_ID),
@Field("projectId") projectId: String = SPUtils.getString(SPConstants.PROJECT_ID),
@Field("coordinateParameter") coordinateParameter: String
): HttpResult<String>
/**
* 查询坐标参数
*/
@FormUrlEncoded
@POST("je/measureWork/findCoordinateParameter")
suspend fun downloadCoordinateSystem(
// @Header("projectId") projectId: String = SPUtils.getString(SPConstants.PROJECT_ID)
@Field("projectId") projectId: String = SPUtils.getString(SPConstants.PROJECT_ID)
): HttpResult<Any?>
}

@ -1,10 +1,11 @@
package com.project.survey.network
import blankj.utilcode.util.LogUtils
import com.bingce.http.HttpsTrustUtil
import com.project.survey.BuildConfig
import com.project.survey.constants.SPConstants
import com.project.survey.util.DESUtil
import com.project.survey.util.SPUtils
import okhttp3.FormBody
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
@ -69,16 +70,60 @@ object RetrofitClient {
val newRequest = builder.url(newHttpUrl).build()
return@addInterceptor chain.proceed(newRequest)
}
// .addInterceptor { chain ->
// val token = SPUtils.getString(SPConstants.TOKEN) ?: ""
// val builder = chain.request().newBuilder().apply {
// removeHeader("Authorization")
// if (token.isNotBlank()) {
// addHeader("Authorization", token)
// }
// }
// return@addInterceptor chain.proceed(builder.build())
// }
.addInterceptor { chain ->
val originalRequest = chain.request()
if (originalRequest.method == "GET") {
val originalUrl = originalRequest.url
// 创建一个新的 HttpUrl.Builder
val urlBuilder = originalUrl.newBuilder()
// 定义一个map用来存储参数
val params = mutableMapOf<String, Any>()
// 遍历原始 URL 的参数
for (name in originalUrl.queryParameterNames) {
val value = originalUrl.queryParameter(name)
// 放入map中
params[name] = value ?: ""
// 移除原来的参数
urlBuilder.removeAllQueryParameters(name)
// 加密参数名
}
// 对参数名和参数值进行加密
val encryptedMap = DESUtil.toParamsEncrypt(params)
encryptedMap.forEach { (key, value) ->
if (key != "params-keys") {
urlBuilder.setQueryParameter(key, value.toString())
}
}
val newRequest = originalRequest.newBuilder()
.url(urlBuilder.build())
.header("params-keys", encryptedMap["params-keys"].toString())
.build()
return@addInterceptor chain.proceed(newRequest)
}
if (originalRequest.method == "POST" && originalRequest.body != null && originalRequest.body is FormBody) {
val formBody = originalRequest.body as FormBody
// 构建一个新的 FormBody.Builder
val formBodyBuilder = FormBody.Builder()
// 定义一个map用来存储参数
val params = mutableMapOf<String, Any>()
for (i in 0 until formBody.size) {
params[formBody.name(i)] = formBody.value(i)
}
// 对参数名和参数值进行加密
val encryptedMap = DESUtil.toParamsEncrypt(params)
encryptedMap.forEach { (key, value) ->
if (key != "params-keys") {
formBodyBuilder.add(key, value.toString())
}
}
val newRequest = originalRequest.newBuilder()
.method(originalRequest.method, formBodyBuilder.build())
.header("params-keys", encryptedMap["params-keys"].toString())
.build()
return@addInterceptor chain.proceed(newRequest)
}
return@addInterceptor chain.proceed(originalRequest)
}
.addInterceptor(HttpLoggingInterceptor().apply {
level = if (BuildConfig.DEBUG)
HttpLoggingInterceptor.Level.BODY

@ -12,7 +12,6 @@ import com.bingce.device.ui.ConnectRtkActivity
import com.bingce.device.ui.ConnectTSActivity
import com.bingce.rtk.command.RTK
import com.bingce.rtk.config.GnssConfigManager
import com.bingce.ui.coordinatesystem.BingCeCoordinateSystemActivity
import com.project.survey.R
import com.project.survey.constants.EventConstants
import com.project.survey.constants.SPConstants
@ -23,6 +22,7 @@ import com.project.survey.logic.viewmodel.MainViewModel
import com.project.survey.model.ProjectBean
import com.project.survey.ui.base.BaseBindingFragment
import com.project.survey.ui.instrument.basestationtranslation.RtkBaseCorrectActivity
import com.project.survey.ui.instrument.coordinatesystem.BingCeCoordinateSystemActivity
import com.project.survey.ui.instrument.mobilestationmode.GnssConfigSetActivity
import com.project.survey.ui.instrument.mobilestationmode.base.RtkPointCorrectActivity
import com.project.survey.ui.instrument.satellitosis.SatelliteStatusActivity

@ -14,24 +14,21 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.viewpager.widget.ViewPager;
import com.afollestad.materialdialogs.MaterialDialog;
import com.bingce.coordlib.model.CoordinateSystem;
import com.bingce.coordlib.util.CoordinateSystemUtil;
import com.bingce.data.base.user.UserConfig;
import com.bingce.data.base.user.UserConfigDao;
import com.bingce.data.cache.AbstractCachedObserver;
import com.bingce.data.database.AppDataBase;
import com.bingce.data.database.CoordinateSystemDb;
import com.bingce.data.database.DBQueryConstant;
import com.bingce.data.database.KeyValueDb;
import com.bingce.data.database.ProjectDb;
import com.bingce.data.surveyor.designdata.coordinate.CoordinateSystemConstants;
import com.bingce.data.surveyor.designdata.coordinate.CoordinateSystemRecord;
import com.bingce.data.surveyor.designdata.kv.KeyValueConstants;
import com.bingce.data.surveyor.designdata.kv.KeyValueRecord;
import com.bingce.data.surveyor.designdata.project.ProjectConstants;
@ -47,16 +44,14 @@ import com.bingce.device.ui.coordinatesystem.fragment.EllipsoidFragment;
import com.bingce.device.ui.coordinatesystem.fragment.GridTransformFragment;
import com.bingce.device.ui.coordinatesystem.fragment.ProjectionFragment;
import com.bingce.device.ui.utils.CoordSysShareUtil;
import com.bingce.dialog.DialogUtils;
import com.bingce.error.BingCeErrorCode;
import com.bingce.event.SingleMessageEvent;
import com.bingce.surveyorBase.R;
import com.bingce.ui.coordinatesystem.PresetCoordinateSystemV2Activity;
import com.bingce.utils.SoftKeyUtils;
import com.bingce.utils.ThreadPoolUtil;
import com.bingce.utils.ValidateUtil;
import com.flyco.tablayout.SlidingTabLayout;
import com.project.survey.constants.SPConstants;
import com.project.survey.logic.viewmodel.CoordinateSystemViewModel;
import com.project.survey.ui.instrument.coordinatesystem.CachedCurrentCoordinateSystem;
import com.project.survey.ui.instrument.mobilestationmode.base.RtkPointCorrectActivity;
import com.project.survey.util.SPUtils;
@ -67,7 +62,6 @@ import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import blankj.utilcode.util.StringUtils;
@ -84,6 +78,8 @@ public class CoordinateSystemContainerFragment extends AbstractCoordinateSystemC
private final CoordSysShareUtil.Export export = new CoordSysShareUtil.Export();
private final CoordSysShareUtil.Import anImport = new CoordSysShareUtil.Import();
private CoordinateSystemViewModel viewModel;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -155,6 +151,18 @@ public class CoordinateSystemContainerFragment extends AbstractCoordinateSystemC
mSlidingTabLayout.setCurrentTab(1, true);
}
}
viewModel = new ViewModelProvider(this).get(CoordinateSystemViewModel.class);
// 分享坐标系统(上传到服务器)
viewModel.getUploadCoordinateSystemResponse().observe(this, s -> {
ToastUtils.showShort(s);
});
// 导入坐标系统
viewModel.getDownloadCoordinateSystemResponse().observe(this, data -> {
CoordinateSystem system = CoordinateSystemUtil.importCoordSysString(data.getZBZHCS_ZHCS());
onCoordinateSystemChanged(system);
ToastUtils.showShort("导入成功");
});
}
@Override
@ -251,7 +259,7 @@ public class CoordinateSystemContainerFragment extends AbstractCoordinateSystemC
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.menu_fragment_coordinate_system_library) {
/*if (itemId == R.id.menu_fragment_coordinate_system_library) {
FragmentActivity activity = getActivity();
if (activity != null) {
PresetCoordinateSystemV2Activity.selectCoordinateSystem(activity, coordinateSystem -> {
@ -317,10 +325,13 @@ public class CoordinateSystemContainerFragment extends AbstractCoordinateSystemC
mSlidingTabLayout.setCurrentTab(index, true);
}
});
} else if (itemId == R.id.menu_fragment_coordinate_system_share) {
showShareParametersDialog();
} else if (itemId == R.id.menu_fragment_coordinate_system_import) {
showImportParametersDialog();
} else*/ if (itemId == R.id.menu_fragment_coordinate_system_share) { //分享坐标系统
// showShareParametersDialog();
String coordinateSystemString = CoordinateSystemUtil.exportCoordSysString(currentCoordinateSystem());
viewModel.uploadCoordinateSystem(coordinateSystemString);
} else if (itemId == R.id.menu_fragment_coordinate_system_import) { //导入坐标系统
// showImportParametersDialog();
viewModel.downloadCoordinateSystem();
}
return super.onOptionsItemSelected(item);
}

@ -66,7 +66,8 @@ class LoginActivity : BaseBindingActivity<ActivityLoginBinding>() {
toast("账号或密码不能为空")
return@setOnClickNoRepeatListener
}
viewModel.fetchLoginSMSCode(isOutLogin, account, password)
viewModel.externalPersonLogin(isOutLogin, account, password, "123")
// viewModel.fetchLoginSMSCode(isOutLogin, account, password)
}
//忘记密码

@ -0,0 +1,192 @@
package com.project.survey.util;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.*;
import blankj.utilcode.util.LogUtils;
public class DESUtil {
// 模拟获取系统配置的方法,可根据实际情况修改
private static String getSystemConfig(String key, String defaultValue) {
// 这里简单返回默认值,实际中可从配置文件等读取
return defaultValue;
}
// 模拟将字符串转换为布尔值的方法
private static boolean toBoolean(String value) {
return Boolean.parseBoolean(value);
}
// 模拟分割字符串的方法
private static String[] split(String str, String delimiter) {
return str.split(delimiter);
}
// 模拟判断对象是否为空的方法
private static boolean isNotEmpty(Object obj) {
return obj != null && (!obj.toString().isEmpty());
}
// 模拟判断是否为类似 FormData 的对象,这里用 Map 模拟
private static boolean isFormData(Object obj) {
return obj instanceof Map;
}
// 模拟判断是否为数字的方法
private static boolean isNumber(Object obj) {
return obj instanceof Number;
}
// 模拟生成随机数的方法
private static int random(int bound) {
Random random = new Random();
return random.nextInt(bound);
}
/**
* DES 加密方法
* @param message 待加密的信息
* @param key 加密密钥
* @return 加密后的十六进制字符串
* @throws Exception 加密过程中可能出现的异常
*/
public static String encryptByDES(String message, String key) throws Exception {
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(StandardCharsets.UTF_8));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new SecureRandom());
byte[] encryptedBytes = cipher.doFinal(message.getBytes(StandardCharsets.UTF_8));
StringBuilder hexString = new StringBuilder();
for (byte b : encryptedBytes) {
String hex = Integer.toHexString(0xFF & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
public static String encryptByDES(String message) throws Exception {
return encryptByDES(message, "bQ85PtpQtEwJ7FkSmrGMFQ9S");
}
/**
* DES 解密方法
* @param ciphertext 加密后的十六进制字符串
* @param key 解密密钥
* @return 解密后的原始字符串
* @throws Exception 解密过程中可能出现的异常
*/
public static String decryptByDES(String ciphertext, String key) throws Exception {
byte[] encryptedBytes = hexStringToByteArray(ciphertext);
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(StandardCharsets.UTF_8));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey, new SecureRandom());
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
// 将十六进制字符串转换为字节数组的辅助方法
private static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i + 1), 16));
}
return data;
}
/**
* 系统请求参数加密方法
* @param params 待加密的参数 Map 表示
* @return 包含随机参数键的 Map
*/
public static Map<String, Object> toParamsEncrypt(Map<String, Object> params) {
// 启用请求参数加密
boolean encrypt = toBoolean(getSystemConfig("JE_SYS_ENCRYPT", "true"));
// 加密参数编码
String[] fields = split(getSystemConfig("JE_SYS_ENCRYPT_FIELD", "funcCode,tableCode,j_query,password,account,code,device,objName,objCode,typeName,FUNCINFO_FUNCCODE,funcId,tableName,ddListCodes,excludes,strData,type,beanId,metaInfo,JE_WORKFLOW_PROCESSINFO_ID,metaInfoXml,FUNCINFO_WHERESQL,DICTIONARY_DDCODE,ableCode,queryColumns,menuId,SY_PRODUCT_ID,pkValue,JE_CORE_RESOURCETABLE_ID,RESOURCETABLE_TABLECODE,userId,deptId,templateCode,typeCode"), ",");
// 随机参数编码
List<String> fieldKeys = new ArrayList<>();
// 加密秘钥
String key = getSystemConfig("JE_SYS_ENCRYPT_KEY", "bQ85PtpQtEwJ7FkSmrGMFQ9S");
// 启用加密 && 有加密参数
if (encrypt && fields.length > 0 && isNotEmpty(params)) {
String[] reg = "abcdefghigklmnopqrstuvwxyz".split("");
Map<String, Object> encryptedParams = new HashMap<>(params);
for (String field : fields) {
// 随机参数
String fieldKey;
do {
fieldKey = reg[random(23)] + random(100);
} while (fieldKeys.contains(fieldKey));
fieldKeys.add(fieldKey);
// 加密内容
Object value = params.get(field);
if (isNotEmpty(value)) {
if (isNumber(value)) {
value = value.toString();
}
try {
value = encryptByDES(value.toString(), key);
} catch (Exception e) {
e.printStackTrace();
}
encryptedParams.remove(field); // 删除原始参数
encryptedParams.put(fieldKey, value); // 增加随机参数,加密信息
}
}
encryptedParams.put("params-keys", String.join(",", fieldKeys));
return encryptedParams;
}
return params;
}
public static void main(String[] args) {
try {
//值加密
String message = "zlh3";
String message2 = "1qaz2wsx!123";
String message3 = "123";
String key = "bQ85PtpQtEwJ7FkSmrGMFQ9S"; // DES 密钥长度必须为 8 字节
String encrypted = encryptByDES(message, key);
String encrypted2 = encryptByDES(message2, key);
String encrypted3 = encryptByDES(message3, key);
LogUtils.d("加密后的信息: " + encrypted);
LogUtils.d("加密后的信息2: " + encrypted2);
LogUtils.d("加密后的信息3: " + encrypted3);
// String decrypted = decryptByDES(encrypted, key);
// System.out.println("解密后的信息: " + decrypted);
// String decrypted2 = decryptByDES(encrypted2, key);
// System.out.println("解密后的信息2: " + decrypted2);
//字段加密
Map<String, Object> params = new HashMap<>();
// Map<String, Object> params2 = new HashMap<>();
// Map<String, Object> params3 = new HashMap<>();
params.put("account", "zlh3");
params.put("password", "1qaz2wsx!123");
params.put("code", "123");
Map<String, Object> result = toParamsEncrypt(params);
LogUtils.d("加密后的参数: " + result);
// Map<String, Object> result2 = toParamsEncrypt(params2);
// System.out.println("加密后的参数: " + result2);
// Map<String, Object> result3 = toParamsEncrypt(params3);
// System.out.println("加密后的参数: " + result3);
} catch (Exception e) {
e.printStackTrace();
}
}
}

@ -0,0 +1,22 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- <item-->
<!-- android:id="@+id/menu_fragment_coordinate_system_library"-->
<!-- android:title="@string/pick_from_library"-->
<!-- app:showAsAction="ifRoom" />-->
<!-- <item-->
<!-- android:id="@+id/menu_fragment_coordinate_system_save"-->
<!-- android:title="@string/save_as_template"-->
<!-- app:showAsAction="ifRoom" />-->
<item
android:id="@+id/menu_fragment_coordinate_system_share"
android:title="@string/share_coordinate_system"
app:showAsAction="never" />
<item
android:id="@+id/menu_fragment_coordinate_system_import"
android:title="@string/import_coordinate_system"
app:showAsAction="never" />
</menu>

@ -0,0 +1,70 @@
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "ee5658c06dcecbae4ac140ea81c3be9d",
"entities": [
{
"tableName": "LocalResultExportFormat",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `format_name` TEXT, `format_content` TEXT, `divided_symbols` TEXT, `file_suffix` INTEGER NOT NULL, `file_header` INTEGER NOT NULL, `angle_format` INTEGER NOT NULL, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "format_name",
"columnName": "format_name",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "format_content",
"columnName": "format_content",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "divided_symbols",
"columnName": "divided_symbols",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "file_suffix",
"columnName": "file_suffix",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "file_header",
"columnName": "file_header",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "angle_format",
"columnName": "angle_format",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"id"
]
},
"indices": [],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ee5658c06dcecbae4ac140ea81c3be9d')"
]
}
}
Loading…
Cancel
Save