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

镇江市网站开发公司集美建设局中心网站

镇江市网站开发公司,集美建设局中心网站,app软件制作工具下载,电商网站建设案例0. 背景 win11环境下 java8 idea 开发的项目接口有加密需求,暂时使用AES完成,AES工具类代码如下 public static String aesEncrypt(String content, String key) throws Exception {//指定加密算法Cipher cipher Cipher.getInstance(AES);//创建加密规则#…0. 背景 win11环境下 java8 idea 开发的项目接口有加密需求,暂时使用AES完成,AES工具类代码如下 public static String aesEncrypt(String content, String key) throws Exception {//指定加密算法Cipher cipher Cipher.getInstance(AES);//创建加密规则指定key和加密类型SecretKeySpec secretKeySpec new SecretKeySpec(key.getBytes(), AES);//指定加密模式为加密指定加密规则cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);//调用加密方法byte[] result cipher.doFinal(content.getBytes());//用Base64编码return new String(Base64.getEncoder().encode(result));}public static String aesDecrypt(String content, String key) throws Exception {//Base64解码byte[] result Base64.getDecoder().decode(content);//指定加密算法Cipher cipher Cipher.getInstance(AES);//创建加密规则指定key和加密类型SecretKeySpec secretKeySpec new SecretKeySpec(key.getBytes(), AES);//指定加密模式为解密指定加密规则cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);return new String(cipher.doFinal(result));}本地开发/测试都能正常解密,在自己的Linux(centos)机器测试接口也没有出现中文乱码的问题. 之后公司暂时只有Windows服务器空闲,只提供了windows服务器用于部署接口程序进行UAT, UAT的时候用户请求接口得到密文后解密后中文就乱码为 ???,确认不开加密明文传输中文不会乱码,问题出在AES加密上 1.原因与正确写法 改为下面的代码后中文就正常了 public String encrypt(String plainText, String key) throws Exception {Cipher cipher Cipher.getInstance(AES);SecretKeySpec secretKeySpec new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), AES);cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);byte[] result cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(result); }public String decrypt(String encryptedText, String key) throws Exception {Cipher cipher Cipher.getInstance(AES);SecretKeySpec secretKeySpec new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), AES);cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);byte[] decodedBytes Base64.getDecoder().decode(encryptedText);byte[] decryptedBytes cipher.doFinal(decodedBytes);return new String(decryptedBytes, StandardCharsets.UTF_8); }与之前代码相比,显式声明了getBytes()方法应该采用utf-8编码 原因: jdk8下,getBytes()方法来自String类,最终调用了StringCoding类的encode方法.方法的默认编码首先是取平台默认编码, Charset.defaultCharset()! String csn Charset.defaultCharset().name();try {// use charset name encode() variant which provides caching.return encode(csn, ca, off, len);} catch (UnsupportedEncodingException x) {warnUnsupportedCharset(csn);}在windows服务器上使用 Charset.defaultCharset().name(); 发现编码集是 windows-1252!非utf-8,自然就有问题!! 所以代码中需要显示声明编码为utf-8!!! Windows-1252 编码是一种单字节编码它主要用于表示西欧语言中的字符包括英语、法语、德语等。在 Windows-1252 编码中并没有包含中文字符所需的字节范围因此无法正确表示中文字符。 2.Java默认编码 上述问题解决后,我才意识了自己有一个误解:java的默认编码是utf-8 现在想想,这样的误解来自学习时老师强调创建新项目后,总要设置/检查是否为utf-8编码,用的时间长了,就默认java编码就是utf-8,真是不应该 查询发现, JDK18及之后,java默认编码根据jep400变成了UTF-8 在JDK18之前(例如jdk8)默认字符集在很大程度上取决于操作系统:大部分Linux上是UTF-8;Windows机器上可能是Windows-1252尤其是在西欧或Windows-31j日语 虽然这一次问题的大头是 没注意Windows服务器的原因,不过代码中没有强调utf-8也的确是一个漏洞,以后在做字节序列和字符序列(byte/char/String) 需要特别注意编码问题! 3.参考阅读 JDK 18 and the UTF-8 as default charset 为什么使用 Java Cipher 要指定转换模式
http://www.hkea.cn/news/14544850/

相关文章:

  • 类似于微博网站怎么做网上免费logo设计
  • 好的网站建设商家市场推广计划
  • 张家界市网站建设设计怎么免费建立网店网站
  • 如何分析竞争对手网站怎么样注册公司流程和费用
  • 如何快速搭建网站网站备案 信息查询
  • 软文网站有哪些上海华东建设发展设计有限公司网站
  • 如何在手机上做网站支付网站建设要求
  • 新北网站建设滨州五学一做考试网站
  • 长春网站建设880元简述网站建设主要流程
  • word 无法注册 wordpress账号优搜云seo
  • 弄淘宝招牌图什么网站可以做免费制作网站平台有哪些
  • 想建设网站iis发布网站无法访问
  • 上海网站推广提供商广告公司寮步网站建设价钱
  • 石家庄网站seo顾问企业网站开发协议
  • 对网站建设 意见和建议网址查询信息查询
  • 简单大气的成品网站东莞市建设监督网站
  • 深度科技商业官方网站网站内容页怎么设计
  • 做网站作品是静态昆明如何做百度的网站
  • 装修包工头接活网站seo常用的优化工具
  • 购物网站建设特色canva 可画人物插画
  • 信宜网站建设网站建设合同的风险责任
  • 企业建设网站没有服务器网站开发与应用论文
  • 网站建设交印花税鞍山互动网
  • 网站幻灯片效果代码芙蓉区建设局网站
  • 网站开发软件英文版wordpress 显示备案号
  • 兰州工业发展建设有限公司网站谷歌海外推广
  • 专业的网店交易平台网站seo公司
  • 建站服务外贸百度电脑版网页版
  • 安徽网站建设详细策划网站首页结构
  • 做电影视频网站赚钱嘛宁波装修公司