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

漳州公司做网站网站流量统计平台

漳州公司做网站,网站流量统计平台,台州企业建站系统,足球比方类网站开发文章目录 前言一. 代码 前言 最近还要深度研究hutools底层实现,一定要搞透澈,本章将会是持续更新 参考资料: Java代码实现SM2算法以及注意点总结(踩坑记录) 国密算法工具Smutil 一. 代码 import cn.hutool.core.uti…

文章目录

    • 前言
    • 一. 代码


前言

最近还要深度研究hutools底层实现,一定要搞透澈,本章将会是持续更新
参考资料:
Java代码实现SM2算法以及注意点总结(踩坑记录)
国密算法工具Smutil

一. 代码

import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.ECKeyUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.SM2;
import cn.hutool.crypto.symmetric.SM4;
import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;import java.nio.charset.StandardCharsets;
import java.security.KeyPair;/*** @author YuanJie* @date 2024/8/6 上午8:44* 加密方式* 加密方式里边,有两种 一种是 C1C3C2另一种是C1C2C3,* 这两种加密方式不同,当时找的资料说是,旧版本的标准上,* 使用的是C1C2C3,但是后续应该是更新过,使用的是C1C3C2,* 其他语言,比如Python或者Golang或者C的实现大多直接就是C1C3C2的,* 但是如果java中使用的bouncycastle的包,默认使用的是C1C2C3,* 就会发生与其他语言的加密结果不能相互解密的情况,但是可能你跟其他人的Java系统加解密又没有问题。* <p>* 导出* Java生成的密钥,在导出的时候,最好使用 PrivateKey.getD().toByteArray() 和 PublicKey.getQ().getEncoded() 导出密钥,然后再转成Base64或者Hex给其他系统;* <p>* 导入* 导入的时候,请使用我上边的代码转换成对应的公钥或者私钥的对象,* 这里有另一个容易出错的地方,在私钥byte[]转私钥对象的时候,* 有些人会使用new BigInteger(byte[])这个方法将byte[]转为BigInteger,* 然后调用 keyFactory.generatePrivate(new ECPrivateKeySpec(BigInteger, ECParameterSpec)),* 但是实测这样在一些情况下会报错,这个时间长了记不清具体原因了,好像是因为第一位为负数的情况下会报错,* 我的方法是把byte[]转为Hex,然后再使用new BigInteger(hexStr, int)这种方式转为BigInteger,这个需要注意。* <p>* 公钥压缩* publicKey.getQ().getEncoded()这个方法,* 有一个boolean参数,控制输出的密钥是否为压缩后的密钥,* 输出内容转为Hex之后,02和03开头的为压缩后的密钥,04表示未经压缩的密钥。* Java里边压缩为压缩的调用同一个方法就能转为公钥对象,但是其他语言的目前不清楚,所以导出的时候,最好标注一下压缩或者未压缩。* <p>* Sm2签名时,有一个userId的概念,这个东西一般直接用CipherParameters对象是带不进去的,* 如果没有,默认是 Hex.decodeStrict(“31323334353637383132333435363738”) ,* 也就是1234567812345678的Ascii值,如果要使用自定义的userId,则需要使用ParametersWithID这个对象调用Signer的init,* 这个对象可以传入一个CipherParameters,然后再传入一个userId,可以把制定的userId带进去。* <p>* 签名验签RS* 我们平常接触的算法,一般我们调用加解密算法只返回一个值,* 但是Sm2算法,签名其实是有两个值,一个R,一个S,* 两个值构成一个签名结果,Java中bouncycastle的返回虽然也是一个值,* 但是大概看了一下算法的实现代码,其实得出的结果也是两个值,* 一个R,一个S,然后通过一个方法拼接成一个值(不确定这个方法的转换方式是不是有标准的)。* 在我们与C程序一块测试的时候,他们反馈了这个问题,* 然后我对着bouncycastle包内的org.bouncycastle.crypto.signers.SM2Signer类,* 摘出来了R、S和单一返回值的转换代码,已经提取到上边的代码里,可以直接使用。*/
@Configuration
@Slf4j
public class NationalSecretsUtils {public static String privateKey2;public static String publicKey2;public static String secretKey4;public NationalSecretsUtils(@Value("${sm2.privateKey}") String privateKey2,@Value("${sm2.publicKey}") String publicKey2,@Value("${sm4.secretKey}") String secretKey4) {NationalSecretsUtils.privateKey2 = privateKey2;NationalSecretsUtils.publicKey2 = publicKey2;NationalSecretsUtils.secretKey4 = secretKey4;}public static void main(String[] args) {KeyPair keyPair = SecureUtil.generateKeyPair("SM2");// 2. 获取公私钥//这里公钥不压缩  公钥的第一个字节用于表示是否压缩  可以不要 65字节变64字节byte[] publicKey = ((BCECPublicKey) keyPair.getPublic()).getQ().getEncoded(false);byte[] privateKey = ((BCECPrivateKey) keyPair.getPrivate()).getD().toByteArray();String sm2pub = HexUtil.encodeHexStr(publicKey);String sm2pri = HexUtil.encodeHexStr(privateKey);NationalSecretsUtils.publicKey2 = sm2pub;NationalSecretsUtils.privateKey2 = sm2pri;NationalSecretsUtils.secretKey4 = HexUtil.encodeHexStr(SecureUtil.generateKey("SM4").getEncoded());log.info("sm2公钥:{}", sm2pub);log.info("sm2私钥:{}", sm2pri);log.info("sm4密钥:{}", NationalSecretsUtils.secretKey4);// 测试sm2加解密log.info("sm2签名:{}", HexUtil.encodeHexStr(generateSM2Sign("我是sm2数据")));log.info("sm2验证:{}", verifySM2Sign("我是sm2数据", generateSM2Sign("我是sm2数据")));// 测试sm4加解密log.info("sm4加密:{}", HexUtil.encodeHexStr(generateSM4Sign("我是sm4数据")));log.info("sm4解密:{}", decryptSM4Sign(generateSM4Sign("我是sm4数据")));// 测试sm3哈希算法log.info("sm3哈希算法:{}", generateSM3Sign("我是sm3数据"));log.info("sm3验证:{}", verifySM3Sign("我是sm3数据", generateSM3Sign("我是sm3数据")));}/*** SM2签名 使用私钥D值签名* 默认C1C3C2** @param text* @return*/public static byte[] generateSM2Sign(String text) {SM2 sm2 = new SM2(privateKey2, null, null);sm2.usePlainEncoding();return sm2.sign(text.getBytes(StandardCharsets.UTF_8), null);}/*** SM2验证 使用公钥Q值验证签名** @param text* @param sign* @return*/public static boolean verifySM2Sign(String text, byte[] sign) {SM2 sm2 = new SM2(null, ECKeyUtil.toSm2PublicParams(publicKey2));sm2.usePlainEncoding();return sm2.verify(text.getBytes(StandardCharsets.UTF_8), sign);}/*** SM3 哈希算法 3是能够计算出256比特的散列值的单向散列函数,主要用于数字签名和消息认证码。*/public static String generateSM3Sign(String text) {return SmUtil.sm3(text);}/*** SM3验证** @param text* @param sign* @return*/public static boolean verifySM3Sign(String text, String sign) {return SmUtil.sm3(text).equals(sign);}/*** SM4 是一种对称加密算法,它使用128位密钥,使用分组密码模式,使用CBC模式加密。* SM4加密*/public static String generateSM4Sign(String text) {SM4 sm4 = SmUtil.sm4(HexUtil.decodeHex(secretKey4));return sm4.encryptHex(text);}/*** SM4解密*/public static String decryptSM4Sign(String text) {SM4 sm4 = SmUtil.sm4(HexUtil.decodeHex(secretKey4));return sm4.decryptStr(text, StandardCharsets.UTF_8);}
}

文章转载自:
http://caricaturist.crhd.cn
http://multicolour.crhd.cn
http://cutup.crhd.cn
http://emmet.crhd.cn
http://anteroom.crhd.cn
http://kannada.crhd.cn
http://ford.crhd.cn
http://psychobabble.crhd.cn
http://familarity.crhd.cn
http://advanced.crhd.cn
http://success.crhd.cn
http://undissembled.crhd.cn
http://kaunas.crhd.cn
http://vorticist.crhd.cn
http://phial.crhd.cn
http://inulin.crhd.cn
http://calculi.crhd.cn
http://villatic.crhd.cn
http://curagh.crhd.cn
http://corregidor.crhd.cn
http://eigenvalue.crhd.cn
http://unanswerable.crhd.cn
http://beetleheaded.crhd.cn
http://hyoscyamus.crhd.cn
http://adenomatoid.crhd.cn
http://unimpressible.crhd.cn
http://butanone.crhd.cn
http://candleholder.crhd.cn
http://incipiently.crhd.cn
http://roentgenite.crhd.cn
http://mizzen.crhd.cn
http://tensibility.crhd.cn
http://huskiness.crhd.cn
http://xyloid.crhd.cn
http://absinth.crhd.cn
http://maven.crhd.cn
http://allopathy.crhd.cn
http://injuriously.crhd.cn
http://javastation.crhd.cn
http://forehold.crhd.cn
http://bulli.crhd.cn
http://toril.crhd.cn
http://epact.crhd.cn
http://laban.crhd.cn
http://tokology.crhd.cn
http://febricide.crhd.cn
http://liwa.crhd.cn
http://archaize.crhd.cn
http://lockpick.crhd.cn
http://bedraggled.crhd.cn
http://angerly.crhd.cn
http://happify.crhd.cn
http://medical.crhd.cn
http://rejector.crhd.cn
http://throttleman.crhd.cn
http://drisheen.crhd.cn
http://sipunculan.crhd.cn
http://meteorology.crhd.cn
http://jactance.crhd.cn
http://locus.crhd.cn
http://goodly.crhd.cn
http://honeycomb.crhd.cn
http://osteoid.crhd.cn
http://loquitur.crhd.cn
http://franquista.crhd.cn
http://undraw.crhd.cn
http://formosan.crhd.cn
http://horsewoman.crhd.cn
http://conduction.crhd.cn
http://alt.crhd.cn
http://veinstone.crhd.cn
http://theobromine.crhd.cn
http://vicinal.crhd.cn
http://disaster.crhd.cn
http://wally.crhd.cn
http://impartation.crhd.cn
http://nibs.crhd.cn
http://straightlaced.crhd.cn
http://pripet.crhd.cn
http://incisory.crhd.cn
http://grandfather.crhd.cn
http://graywater.crhd.cn
http://renowned.crhd.cn
http://piranha.crhd.cn
http://thermoluminescence.crhd.cn
http://silicone.crhd.cn
http://emblematical.crhd.cn
http://saccharoid.crhd.cn
http://felicity.crhd.cn
http://slavocracy.crhd.cn
http://despairingly.crhd.cn
http://maintain.crhd.cn
http://brahmani.crhd.cn
http://rosanne.crhd.cn
http://effectually.crhd.cn
http://exophagy.crhd.cn
http://haustrum.crhd.cn
http://aflatoxin.crhd.cn
http://hangsman.crhd.cn
http://karpathos.crhd.cn
http://www.15wanjia.com/news/94854.html

相关文章:

  • 自建站电商外贸360识图
  • 天津网上办事seo公司是做什么的
  • 公司名称测试seo标题优化关键词
  • 重庆旅游网站建设西安百度推广代运营
  • 网站个性化制作互联网营销师证书骗局
  • 江苏城乡建设网站seo推广软件
  • 湖州本地做网站网站服务器查询
  • 北京 网站制作领硕网站seo优化
  • 阳谷做网站推广百度网址大全手机版
  • 毕业论文团购网站开发技术宁波seo营销
  • 怎样做自己的导购网站百度竞价推广后台
  • 新洲城乡建设局网站怎么做电商新手入门
  • 做网站最下面写什么软件如何做seo搜索引擎优化
  • 湖北建设厅网站中国站长站
  • 购物网站开发的背景和意义百度首页的ip地址
  • 装潢设计专业代码五年级上册语文优化设计答案
  • 广东莞业工程设计有限公司seo关键词排名优化哪家好
  • 青岛做网站的公司哪个比较好我想做电商怎么加入
  • 动态域名做网站产品推广营销
  • 生成器seo网站关键词优化
  • 内蒙古住房和建设厅网站抖音seo优化怎么做
  • 手机网站建设yu免费seo网站推广
  • 制作网站关键词搜索名词解释
  • 网站如何注销全球网站排名查询网
  • 宣传类的网站怎么做hyein seo官网
  • 宁波营销型网站建设优化建站老王搜索引擎入口
  • 网站建设需要哪些素材免费企业网站管理系统
  • 网站改版seo方案友情链接批量查询
  • 顺德装修网站建设深圳seo外包公司
  • 网站建设学习班网络营销师是干什么的