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

中国最大的免费素材网站wordpress 编写页面代码

中国最大的免费素材网站,wordpress 编写页面代码,专做旅游酒店特价网站,搜索引擎广告属于什么渠道秦医如毒#xff0c;无药可解。 话不多说#xff0c;先上需要用到的js文件下载链接 和 jsp前端代码。 第一步#xff1a;下载两个必备的js文件—— crypto-js.js、sm2.js 。 它们的下载链接如下↓#xff08;该网页不魔法上网的话会很卡#xff0c;毕竟github#x…秦医如毒无药可解。 话不多说先上需要用到的js文件下载链接  和  jsp前端代码。 第一步下载两个必备的js文件—— crypto-js.js、sm2.js 。 它们的下载链接如下↓该网页不魔法上网的话会很卡毕竟github建议卡的话就多重新加载几次我差不多试了8次才进去 https://github.com/Saberization/SM2 进入网页下载后拿取下方↓图片上的两个js就行 然后将这两js放到存放静态资源static的目录下我放的是static中的sm2目录sm2这个目录是我创的 后面在jsp的head/head中引入这两个js文件 !--jsp引入sm2实现前端加密-- script typetext/javascript src${pageContext.request.contextPath}/static/sm2/crypto-js.js charsetutf-8/script script typetext/javascript src${pageContext.request.contextPath}/static/sm2/sm2.js charsetutf-8/script 第二步前端jsp代码实现下方的代码写在jsp页面的script typetext/javascript/script中。 作用是当调用下方↓函数的时候会给你传入的值进行加密并返回。 注【你生成的公钥】的生成方式可以在文章末尾的SM2Utils.java工具类中可以找到是个main方法一键生成简单粗暴 !--sm2加密函数-- function sm2EncryptPwd(data) {!--sm2公钥--var publicKey 你生成的公钥;return sm2Encrypt(data, publicKey, 1); } 至此前端加密结束进入后端解密环节—— 后端需要的jar包是bcprov-jdk15on-1.68.jar 注意该jar包必须要1.60版本以上的不然解密的时候会缺少必要的条件并且我用的时候本地环境是JDK1.8的其他环境没试过建议如有不同先查一下。 dependencygroupIdorg.bouncycastle/groupIdartifactIdbcprov-jdk15on/artifactIdversion1.68/version /dependency 第三步后端代码实现。 导入jar包后就是必要的工具类实体类SM2Utils.java 你可以用工具类本身的加密方法解密也可以用工具类中我写的 getJieMiJieGuo() 方法解密。 我个人建议用我写的因为操作起来更简单些只需要传入加密后的字符串就可以返回解密的数据。 其中【你生成的公钥】和【你生成的私钥】可以通过工具类中的方法生成生成完复制粘贴进去就行 注后端和前端的公钥要保持一致因为公钥私钥是配对使用的 package com.test.common.utils;import org.apache.commons.net.util.Base64; import org.bouncycastle.asn1.gm.GMNamedCurves; import org.bouncycastle.asn1.x9.X9ECParameters; import org.bouncycastle.crypto.InvalidCipherTextException; import org.bouncycastle.crypto.engines.SM2Engine; import org.bouncycastle.crypto.params.ECDomainParameters; import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.bouncycastle.crypto.params.ParametersWithRandom; import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey; import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.jce.spec.ECParameterSpec; import org.bouncycastle.jce.spec.ECPrivateKeySpec; import org.bouncycastle.jce.spec.ECPublicKeySpec; import org.bouncycastle.util.encoders.Hex;import java.math.BigInteger; import java.security.*; import java.security.spec.ECGenParameterSpec;public class SM2Utils {private static final String publicKey 你生成的公钥;private static final String privateKey 你生成私钥;/*** 解密并且获取解密后的字符串** return 秦无解*/public static String getJieMiJieGuo(String cipherData) {byte[] cipherDataByte Hex.decode(cipherData);BigInteger privateKeyD new BigInteger(privateKey, 16);X9ECParameters sm2ECParameters1 GMNamedCurves.getByName(sm2p256v1);ECDomainParameters domainParameters1 new ECDomainParameters(sm2ECParameters1.getCurve(), sm2ECParameters1.getG(), sm2ECParameters1.getN());ECPrivateKeyParameters privateKeyParameters new ECPrivateKeyParameters(privateKeyD, domainParameters1);//用私钥解密,SM2Engine.Mode.C1C3C2得加不然就会报错invalid cipher textSM2Engine sm2Engine new SM2Engine(SM2Engine.Mode.C1C3C2);sm2Engine.init(false, privateKeyParameters);//processBlock得到Base64格式记得解码byte[] arrayOfBytes null;try {arrayOfBytes Base64.decodeBase64(sm2Engine.processBlock(cipherDataByte, 0, cipherDataByte.length));} catch (Exception e) {e.printStackTrace();return null;}//得到明文SM2 Encryption Testreturn new String(arrayOfBytes);}/*** Description 生成秘钥对* Author msx* return KeyPair*/public static KeyPair createECKeyPair() {//使用标准名称创建EC参数生成的参数规范final ECGenParameterSpec sm2Spec new ECGenParameterSpec(sm2p256v1);// 获取一个椭圆曲线类型的密钥对生成器final KeyPairGenerator kpg;try {kpg KeyPairGenerator.getInstance(EC, new BouncyCastleProvider());// 使用SM2算法域参数集初始化密钥生成器默认使用以最高优先级安装的提供者的 SecureRandom 的实现作为随机源// kpg.initialize(sm2Spec);// 使用SM2的算法域参数集和指定的随机源初始化密钥生成器kpg.initialize(sm2Spec, new SecureRandom());// 通过密钥生成器生成密钥对return kpg.generateKeyPair();} catch (Exception e) {e.printStackTrace();return null;}}/*** Description 公钥加密* Author msx* param publicKeyHex SM2十六进制公钥* param data 明文数据* return String*/public static String encrypt1(String publicKeyHex, String data) {return encrypt(getECPublicKeyByPublicKeyHex(publicKeyHex), data, 1);}/*** Description 公钥加密* Author msx* param data 明文数据* return String*/public static String encrypt(String data) {return encrypt(getECPublicKeyByPublicKeyHex(publicKey), data, 1);}/*** Description 公钥加密* Author msx* param publicKey SM2公钥* param data 明文数据* param modeType 加密模式* return String*/public static String encrypt(BCECPublicKey publicKey, String data, int modeType) {//加密模式SM2Engine.Mode mode SM2Engine.Mode.C1C3C2;if (modeType ! 1) {mode SM2Engine.Mode.C1C2C3;}//通过公钥对象获取公钥的基本域参数。ECParameterSpec ecParameterSpec publicKey.getParameters();ECDomainParameters ecDomainParameters new ECDomainParameters(ecParameterSpec.getCurve(),ecParameterSpec.getG(), ecParameterSpec.getN());//通过公钥值和公钥基本参数创建公钥参数对象ECPublicKeyParameters ecPublicKeyParameters new ECPublicKeyParameters(publicKey.getQ(), ecDomainParameters);//根据加密模式实例化SM2公钥加密引擎SM2Engine sm2Engine new SM2Engine(mode);//初始化加密引擎sm2Engine.init(true, new ParametersWithRandom(ecPublicKeyParameters, new SecureRandom()));byte[] arrayOfBytes null;try {//将明文字符串转换为指定编码的字节串byte[] in data.getBytes(utf-8);//通过加密引擎对字节数串行加密arrayOfBytes sm2Engine.processBlock(in, 0, in.length);} catch (Exception e) {System.out.println(SM2加密时出现异常: e.getMessage());e.printStackTrace();}//将加密后的字节串转换为十六进制字符串return Hex.toHexString(arrayOfBytes);}/*** Description 私钥解密* Author msx* param privateKeyHex SM2十六进制私钥* param cipherData 密文数据* return String*/public static String decrypt1(String privateKeyHex, String cipherData) {return decrypt(getBCECPrivateKeyByPrivateKeyHex(privateKeyHex), cipherData, 1);}/*** Description 私钥解密* Author msx* param s* param cipherData 密文数据* return String*/public static String decrypt(String s, String cipherData) {return decrypt(getBCECPrivateKeyByPrivateKeyHex(privateKey), cipherData, 1);}/*** Description 私钥解密* Author msx* param privateKey SM私钥* param cipherData 密文数据* param modeType 解密模式* return*/public static String decrypt(BCECPrivateKey privateKey, String cipherData, int modeType) {//解密模式SM2Engine.Mode mode SM2Engine.Mode.C1C3C2;if (modeType ! 1) {mode SM2Engine.Mode.C1C2C3;}//将十六进制字符串密文转换为字节数组需要与加密一致加密是加密后的字节数组转换为了十六进制字符串byte[] cipherDataByte Hex.decode(cipherData);//通过私钥对象获取私钥的基本域参数。ECParameterSpec ecParameterSpec privateKey.getParameters();ECDomainParameters ecDomainParameters new ECDomainParameters(ecParameterSpec.getCurve(),ecParameterSpec.getG(), ecParameterSpec.getN());//通过私钥值和私钥钥基本参数创建私钥参数对象ECPrivateKeyParameters ecPrivateKeyParameters new ECPrivateKeyParameters(privateKey.getD(),ecDomainParameters);//通过解密模式创建解密引擎并初始化SM2Engine sm2Engine new SM2Engine(mode);sm2Engine.init(false, ecPrivateKeyParameters);String result null;try {//通过解密引擎对密文字节串进行解密byte[] arrayOfBytes sm2Engine.processBlock(cipherDataByte, 0, cipherDataByte.length);//将解密后的字节串转换为utf8字符编码的字符串需要与明文加密时字符串转换成字节串所指定的字符编码保持一致result new String(arrayOfBytes, utf-8);} catch (Exception e) {System.out.println(SM2解密时出现异常 e.getMessage());}return result;}//椭圆曲线ECParameters ASN.1 结构private static X9ECParameters x9ECParameters GMNamedCurves.getByName(sm2p256v1);//椭圆曲线公钥或私钥的基本域参数。private static ECParameterSpec ecDomainParameters new ECParameterSpec(x9ECParameters.getCurve(), x9ECParameters.getG(), x9ECParameters.getN());/*** Description 公钥字符串转换为 BCECPublicKey 公钥对象* Author msx* param pubKeyHex 64字节十六进制公钥字符串(如果公钥字符串为65字节首个字节为0x04表示该公钥为非压缩格式操作时需要删除)* return BCECPublicKey SM2公钥对象*/public static BCECPublicKey getECPublicKeyByPublicKeyHex(String pubKeyHex) {//截取64字节有效的SM2公钥如果公钥首个字节为0x04if (pubKeyHex.length() 128) {pubKeyHex pubKeyHex.substring(pubKeyHex.length() - 128);}//将公钥拆分为x,y分量各32字节String stringX pubKeyHex.substring(0, 64);String stringY pubKeyHex.substring(stringX.length());//将公钥x、y分量转换为BigInteger类型BigInteger x new BigInteger(stringX, 16);BigInteger y new BigInteger(stringY, 16);//通过公钥x、y分量创建椭圆曲线公钥规范ECPublicKeySpec ecPublicKeySpec new ECPublicKeySpec(x9ECParameters.getCurve().createPoint(x, y), ecDomainParameters);//通过椭圆曲线公钥规范创建出椭圆曲线公钥对象可用于SM2加密及验签return new BCECPublicKey(EC, ecPublicKeySpec, BouncyCastleProvider.CONFIGURATION);}/*** Description 私钥字符串转换为 BCECPrivateKey 私钥对象* Author msx* param privateKeyHex 32字节十六进制私钥字符串* return BCECPrivateKey SM2私钥对象*/public static BCECPrivateKey getBCECPrivateKeyByPrivateKeyHex(String privateKeyHex) {//将十六进制私钥字符串转换为BigInteger对象BigInteger d new BigInteger(privateKeyHex, 16);//通过私钥和私钥域参数集创建椭圆曲线私钥规范ECPrivateKeySpec ecPrivateKeySpec new ECPrivateKeySpec(d, ecDomainParameters);//通过椭圆曲线私钥规范创建出椭圆曲线私钥对象可用于SM2解密和签名return new BCECPrivateKey(EC, ecPrivateKeySpec, BouncyCastleProvider.CONFIGURATION);}public static void main(String[] args) {String publicKeyHex null;String privateKeyHex null;KeyPair keyPair createECKeyPair();PublicKey publicKey keyPair.getPublic();if (publicKey instanceof BCECPublicKey) {//获取65字节非压缩缩的十六进制公钥串(0x04)publicKeyHex Hex.toHexString(((BCECPublicKey) publicKey).getQ().getEncoded(false));System.out.println(----SM2公钥 publicKeyHex);}PrivateKey privateKey keyPair.getPrivate();if (privateKey instanceof BCECPrivateKey) {//获取32字节十六进制私钥串privateKeyHex ((BCECPrivateKey) privateKey).getD().toString(16);System.out.println(----SM2私钥 privateKeyHex);}/*** 公钥加密*/String data 待加密数据;//将十六进制公钥串转换为 BCECPublicKey 公钥对象String encryptData encrypt1(publicKeyHex, data);System.out.println(----加密结果 encryptData);/*** 私钥解密*///将十六进制私钥串转换为 BCECPrivateKey 私钥对象data decrypt1(privateKeyHex, encryptData);System.out.println(----解密结果 data);} } 最后在后端接口中调用工具类的解密方法就可以对前端传来的加密数据进行解密。 至此✿✿ヽ(°▽°)ノ✿撒花。 此章暂时完结。
http://www.eeditor.cn/news/120666/

相关文章:

  • 网站开发项目策划成品软件源码网站大全
  • 北京网站建设有哪些浩森宇特wordpress鼠标悬停图片
  • 做非经营网站需要营业执照网络营销策略有哪些
  • 外贸询单seo运营招聘
  • 中天建设集团有限公司官网seo免费诊断联系方式
  • 南京做公司网站的公司哪家好物流发货平台
  • 自学网站查分数可以做兼职的网站有哪些工作
  • 有注入漏洞的网站源码东莞百度seo
  • 网站开发实践实验报告大兴网站建设首选公司
  • 昆明网站建设平台网站推广是做什么的
  • 制作网站需要用什么软件网站建设与网页设计可行性分析报告
  • 网站优化 代码有什么做礼品的卖家网站
  • 扬州专注企业网站建设宣威网站建设
  • 蚌埠市做家教网站上海网页制作培训学校
  • 冬青街 做网站企业查询网站有哪些
  • 网站开发还是安卓开发好eclipse网站开发流程
  • 跑腿网站开发wordpress英文
  • 网站标题权重宁波网站搭建公司
  • 网站关键词怎么做排名深圳app网站开发
  • 长沙网站关键词优化网站子目录绑定二级域名
  • 江苏运营网站建设业务用php做视频网站有哪些
  • 移动网站开发技术有哪些东莞快速建站平台
  • 怎么在网站上做排名手机网站代码
  • 做铝材的网站做架构图的网站
  • 上海黄浦区网站建设福州哪里制作网站
  • 东莞专业做外贸网站为什么做美妆网站
  • 常德网站优化wordpress怎么设计主题
  • 做网站要用写接口wordpress图片缓冲
  • 网站建设与栏目设置做个网站要多少钱 一般
  • 网站建设公司天成网站js特效