当前位置: 首页 > news >正文

网站建设龙头企业青岛的网站设计公司

网站建设龙头企业,青岛的网站设计公司,深圳网站建设 排行榜,网站审核员做点啥如果你对于网络请求用了https后是否还有必要对参数加密有疑问可以看我上篇的文章#xff1a;网络安全https 记得耐心看完#xff0c;下面说问题#xff1a; Caused by: java.lang.IllegalArgumentException: Unexpected char 0x0a 一开始以为是okhttp框架对特殊字符做了现在…如果你对于网络请求用了https后是否还有必要对参数加密有疑问可以看我上篇的文章网络安全https 记得耐心看完下面说问题 Caused by: java.lang.IllegalArgumentException: Unexpected char 0x0a 一开始以为是okhttp框架对特殊字符做了现在网上其他文章说的是对中文字符我想我这也没中文啊但还是全部换成原生试了一下果然还是一样报错坑爹的网友啊哈哈 下面是测试用例demo的代码 package com.tcssj.mbjmb;import android.util.Base64; import android.view.View;import java.nio.charset.StandardCharsets;import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec;public class AESUtil2 {public static byte[] base64ToDecode(String str) {byte[] byteStr Base64.decode(str, Base64.DEFAULT);return byteStr;}public static String encode(byte[] key) {return Base64.encodeToString(key, Base64.NO_WRAP);}/*** 加密** param content 需要加密的内容* param key 加密密码* return*/public static String encrypt(String content, String key) {return encrypt(content,key.getBytes());}public static String encrypt(String content, byte[] key) {try {//构造密钥SecretKeySpec skey new SecretKeySpec(key, utf-8);//创建初始向量iv用于指定密钥偏移量(可自行指定但必须为128位)因为AES是分组加密下一组的iv就用上一组加密的密文来充当IvParameterSpec iv new IvParameterSpec(key, 0, 16);//创建AES加密器Cipher cipher Cipher.getInstance(AES/CBC/PKCS5Padding);byte[] byteContent content.getBytes(StandardCharsets.UTF_8);//使用加密器的加密模式cipher.init(Cipher.ENCRYPT_MODE, skey, iv);// 加密byte[] result cipher.doFinal(byteContent);//使用BASE64对加密后的二进制数组进行编码return encode(result);} catch (Exception e) {e.printStackTrace();return content;}}/*** 解密* param content* param key* return*/public static String decrypt(String content, byte[] key) {try {SecretKeySpec skey new SecretKeySpec(key, utf-8);IvParameterSpec iv new IvParameterSpec(key, 0, 16);Cipher cipher Cipher.getInstance(AES/CBC/PKCS5Padding);//解密时使用加密器的解密模式// 初始化cipher.init(Cipher.DECRYPT_MODE, skey, iv);byte[] result cipher.doFinal(base64ToDecode(content));// 解密return new String(result);} catch (Exception e) {return content;}} } package com.tcssj.mbjmbimport android.os.Bundle import android.os.Handler import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import com.tcssj.mbjmb.ui.theme.MbjmbTheme import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking import okhttp3.Headers import okhttp3.MediaType import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody import org.json.JSONObjectclass MainActivity : ComponentActivity() ,test {private val TAG MainActivitylateinit var text:Stringoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)runBlocking(Dispatchers.IO) {val okHttpClientOkHttpClient() // val buildokHttpClient.newBuilder()val jsonpostJSONObject()jsonpost.put(type,text)jsonpost.put(mobile,81991419936)val bodyRequestBody.create(MediaType.parse(application/json;charsetutf-8),AESUtil2.encrypt(jsonpost.toString(),AESUtil2.base64ToDecode(allWUzg1eFJ3ekpNQklUeQ)))val jsonJSONObject()json.put(sourceChannel,Orange)json.put(packageName,com.tcssj.mbjmb)json.put(adid,)json.put(version,12.0.0)json.put(uuId,)json.put(userId,)val request Request.Builder().url(http://47.101.194.189:10018/auth/v3.1/user/sendVerifiyCode).header(HCFQ,AESUtil2.encrypt(json.toString(), xDBrgJdnnY2w1Do7Ik6otonXQRgQyt46)).header(packageName,mbjmb).post(body).build()val response okHttpClient.newCall(request).execute()response.toString()textAESUtil2.decrypt(response.body().string(), AESUtil2.base64ToDecode(allWUzg1eFJ3ekpNQklUeQ))Log.i(TAG, onCreate: AESUtil2.decrypt(text, AESUtil2.base64ToDecode(allWUzg1eFJ3ekpNQklUeQ)))}setContent {MbjmbTheme {// A surface container using the background color from the themeSurface(modifier Modifier.fillMaxSize(),color MaterialTheme.colorScheme.background) {Greeting(name text)}}}} }Composable fun Greeting(name: String, modifier: Modifier Modifier) {Text(text $name!,modifier modifier) }Preview(showBackground true) Composable fun GreetingPreview() {MbjmbTheme {Greeting(Android)} }第一个问题的原因就是我们参数进行加密后有换行符号\n,怎么解决呢如下图划线的部分你如果是用的Default那就会报第一个错误你需要使用NO_WRAP 不生成换行符的。 第二个坑就是返回的也是加密后的乱码你需要拿回来解密的那你下图中就不能使用body.toString() 方法要用String()方法。我是怎么发现的我用apifox 工具如果你接口调试还没使用上拿走不谢还是要用这么个工具不然你来来回回启动app调试接口效率很低但你会懒的使用抗拒学新的人吗天性但你要克服调试接口的时候发现工具和android里面的返回结果不一致 因为看下图如果你用了toString 方法 message当时空的整个是空的框架加密的内容okhttp无法转换成它的结构那你就要用string拿到字符串自己解析。
http://www.dnsts.com.cn/news/238665.html

相关文章:

  • 建设局网站公示的规划意味着什么好看的团队官网源码
  • 双域名网站南宁兴宁区建设局网站
  • 为什么点不开网站怎么注册公司公众号
  • 河北建设厅网站设置网站流量查询
  • 国外设计最漂亮的网站家乡的网站设计模板
  • 网站内容建设的原则是什么意思开发软件外包
  • 顺义企业建站费用哪个网站做宣传比较好
  • 青海建设信用信息服务网站娄底网站建设79ld
  • 公路建设市场信用信息系统网站备案多个网站
  • 聊城专业做网站做网站软件
  • 刚做的网站怎么在百度搜到营销网络的建设是什么意思
  • 舆情网站直接打开寻找项目做的网站
  • 驾校网站建设顺德网站建设如何
  • 网站建设期任务及总结网站建设 产品拍照
  • 莆田网站建设五维网络有限公司网站可以做多语言的吗
  • 棋牌网站怎么做优化山东胜越石化工程建设有限公司网站
  • 天助可以搜索别人网站项目经理证书
  • 门业网站模板友情链接怎么设置
  • 怀宁县建设局网站网站建设修改建议
  • 专业社交网站建设公司宜兴做网站多少钱
  • 网站二次开发模板留言板 wordpress
  • 哈市哪里网站做的好wordpress 所有页面空白
  • 陕西整站关键词自然排名优化新绛做网站
  • 国外游戏代码网站wordpress用多大的带宽
  • 海报在线制作网站学院网络营销策划方案
  • 注册个人网站要钱吗点击图片跳转到网站怎么做链接
  • 学做美食看哪个网站免费wordpress
  • 免费网站空间虚拟主机网站设计就业培训学校排名
  • 中国建设网官方网站建筑工程税率住房和城乡建设部部长
  • 福步外贸网站wordpress主题siren