范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

AS2协议详解(二)

  上一篇中主要讲解了加密的理论知识,这篇来上代码。
  签名和验签
  通过信息摘要算法和非对称加密,可以实现信息的防伪造,防篡改,通过我们的私钥来签名消息,接收方就能通过我们的公钥来校验该消息是否是我们发送的。
  /**  * 获取证书库  */ public static KeyStore getKeyStore(InputStream keyStoreInputStream, String keyStorePassword, String keyStoreType) throws Exception {     return getKeyStore(keyStoreInputStream, keyStorePassword, keyStoreType); }  public static KeyStore getKeyStore(InputStream keyStoreInputStream, String keyStorePassword, String keyStoreType, String provider) throws Exception {     KeyStore keyStore;     if (StringUtils.isNotBlank(provider)) {         keyStore = KeyStore.getInstance(keyStoreType, provider);     } else {         keyStore = KeyStore.getInstance(keyStoreType);     }     keyStore.load(keyStoreInputStream, keyStorePassword.toCharArray());     IoUtil.close(keyStoreInputStream);     return keyStore; }  /**  * 从证书库中获取公钥  */ public static PublicKey getPublicKeyFromKeyStore(KeyStore keyStore, String alias) throws Exception {     Certificate certificate = keyStore.getCertificate(alias);     return certificate.getPublicKey(); }  /**  * 从证书库获取私钥  */ public static PrivateKey getPrivateKeyFromKeyStore(KeyStore keyStore, String alias, String password) throws Exception {     return (PrivateKey) keyStore.getKey(alias, password.toCharArray()); }  /**  * 签名  */ public static byte[] sign(byte[] message, PrivateKey privateKey, String algorithm) throws Exception {     Signature signature;     signature = Signature.getInstance(algorithm);     signature.initSign(privateKey);     signature.update(message);     return signature.sign(); }  /**  * 验签  */ public static boolean verify(byte[] message, byte[] signMessage, PublicKey publicKey, String algorithm) throws Exception {     Signature signature;     boolean verifyResult;     signature = Signature.getInstance(algorithm);     signature.initVerify(publicKey);     signature.update(message);     verifyResult = signature.verify(signMessage);     return verifyResult; }
  然后写个单元测试来验证下
  @Test public void testVerify() throws Exception {     FileInputStream fis = new FileInputStream(new File("d:/keys/testkeystore.keystore"));     //获取证书库     KeyStore keyStore = getKeyStore(fis, "mypassword", "JKS");     //获取私钥     PrivateKey privateKey = getPrivateKeyFromKeyStore(keyStore, "mykeystore", "mypassword");     //摘要算法用SHA1,非对称加密算法用RSA进行签名     byte[] signMessage = sign(CONTENT.getBytes(), privateKey, "SHA1withRSA");     //获取公钥     PublicKey publicKey = getPublicKeyFromKeyStore(keyStore, "mykeystore");     //进行验签     boolean verify = verify(CONTENT.getBytes(), signMessage, publicKey, "SHA1withRSA");     System.out.println(verify); }
  加密和解密
  /**  * 使用私钥加密  */ public static byte[] encodeByPrivateKey(byte[] data, PrivateKey privateKey) throws Exception {     // 对数据加密,加密算法由创建秘钥时指定,也可以自己指定,一般用RSA     Cipher cipher = Cipher.getInstance(privateKey.getAlgorithm());     cipher.init(Cipher.ENCRYPT_MODE, privateKey);     return cipher.doFinal(data); }  /**  * 使用公钥解密  */ public static byte[] decodeByPublicKey(byte[] data, PublicKey publicKey)         throws Exception {     // 对数据加密     Cipher cipher = Cipher.getInstance(publicKey.getAlgorithm());     cipher.init(Cipher.DECRYPT_MODE, publicKey);     return cipher.doFinal(data); }  /**  * 公钥加密  */ public static byte[] encodeByPublicKey(byte[] data, PublicKey publicKey)         throws Exception {     // 对数据加密     Cipher cipher = Cipher.getInstance(publicKey.getAlgorithm());     cipher.init(Cipher.ENCRYPT_MODE, publicKey);     return cipher.doFinal(data); }  /**  * 私钥解密  */ public static byte[] decodeByPrivateKey(byte[] data, PrivateKey privateKey) throws Exception {     // 对数据加密     Cipher cipher = Cipher.getInstance(privateKey.getAlgorithm());     cipher.init(Cipher.DECRYPT_MODE, privateKey);     return cipher.doFinal(data); }
  单元测试
  public static String CONTENT = "寥落古行宫,宫花寂寞红。白头宫女在,闲坐说玄宗"; @Test public void testDecode() throws Exception {     FileInputStream fis = new FileInputStream(new File("d:/keys/testkeystore.keystore"));     KeyStore keyStore = getKeyStore(fis, "mypassword", "JKS");     PrivateKey privateKey = getPrivateKeyFromKeyStore(keyStore, "mykeystore", "mypassword");     PublicKey publicKey = getPublicKeyFromKeyStore(keyStore, "mykeystore");     //加密     byte[] encode = encodeByPrivateKey(CONTENT.getBytes(), privateKey);     //解密     byte[] message = decodeByPublicKey(encode, publicKey);     System.out.println(new String(message)); }

Mac端口数量一览,哪台Mac的端口最多?Apple可能正试图将我们推向无线未来,但对于很多事情,您仍然需要使用数据线和端口来插入显示器外置驱动器或读卡器等配件。了解哪些Mac拥有的端口数量,因此当您将其带回家并尝试连接所5G手机换机潮来临,联发科明年5G芯片出货量将过亿联发科今年过的不错,而且很明显,明年将过的更好。根据联发科给出的销售数据,今年联发科出货的5G芯片已经达到了4500万颗,如果按照全球出货超过2亿部来推算,联发科在5G手机市场的占苹果造的电动汽车,明年9月上市,特斯拉慌了吗?苹果制造的汽车,最快可能明年的9月份,就可以上市了。看到这条新闻,我只有一个反应不造电动汽车的高科技公司,是不合格的。我之前就知道苹果其实一直想打造自己的汽车,但是因为困难确实太大在Mac上释放磁盘空间和隐藏存储的提示和技巧随着我们的设备功能变得越来越强大,我们的Mac储存空间往往会更快地被各种文件所填满。下面小编为大家带来以下四个技巧来释放Mac存储空间和隐藏空间,赶快Get这项技能吧!如果您想快速如何释放iPhone和iPad上的存储空间如果您的iPhone或iPad内存满了,您可以采取几种措施来收回存储空间。在本指南中,我们将介绍几种可用的选项和方法,以释放iOS设备上的存储空间。每个iPhone和iPad都具有明年起计生补贴调整,这3项补助按统一标准发放,独女户凭证领!众所周知,计划生育是我国的一项基础国策,曾几何时,这项政策影响了一代又一代人。在咱们农村,虽然有不少人崇尚多子多福,但是依然有很多家庭响应了政府号召,只生育了一个孩子,成为了光荣的NFT是技术泡沫还是技术革命?点击看原文NFT是技术泡沫还是技术革命?一张头像的图片,价值几何?NBA现役球星斯蒂芬库里可以回答你18万美元,上无封顶。日前,库里给自己的社交媒体换上了一个新头像,这个穿着粗花西大厂纷纷布局机器人,怎么大家都开始不务正业了?(点击上方头像关注集成侠)数据统计,今年上半年,我国机器人企业已获得119起投资,累计融资金额超百亿元。作为制造业皇冠顶端的明珠,机器人的研发制造与应用是衡量一个国家科技水平与高端大部分客户突然被抢走!社区团购小巨头破产社区团购洗牌开始了。7月7日晚间,一天前刚更名为蜜橙生活的同程生活发布公告称,正式申请了破产。这是2020年以来,第一家倒下的大型社区团购平台,距离它上一次融资已经过去了近一年。在花上万元购买一套顶配大疆新品FPV,打开后发现大疆发布的新品FPV无人机的正式开箱视频来啦其实在3月2日的时候我已经直播开箱过一次但是因为身体不舒服所以就没有录播开箱视频为了内容的完整性我又自费买了一套顶配的FPV来开箱视频加盘点苹果2020年重大事件2020年是残酷的一年,但苹果公司在2020年已经取得了许多成功,以及一些失策和误判,事后,它可能会以不同的方式处理。接下来,我们就以月为单位盘点一下2020年与Apple有关的重
Jeff离开暴雪,这个世界还会有更多英雄么?2021年4月21日,守望先锋官推发表推文,表示JeffKaplan(守望先锋游戏总监,因为谐音中国玩家喜欢称其为姐夫)将从暴雪离职。整个游戏社区瞬间炸开了锅,玩家们开始怀念起姐夫信仰来袭ROG玩家国度落户南京金鹰世界南京金鹰世界位于应天大街888号,这是一座368米世界最高的非对称三塔连体建筑在这座商业中心里,又多了一处打卡时下尖端电竞设备与沉浸式游戏对战体验的好去处!南京首家ROG玩家国度门世界上另一个中国,当地人说汉语使用人民币,采用人教版教材另一个中国吗?有一个地方的人们说话都用汉语消费,用人民币学校用的书都是用汉语写的,即使是国内的新闻广播也用同样的中国音调发生,他们热爱中国文化,因此,中国人来到这里都会感到奇怪,觉超能打的轻薄本,华硕无畏解锁实力选手新概念有没有哪款笔记本,里里外外都称得上实力派?当然有,无畏Pro14率先出来应战。上周,实力全开,超能打的华硕无畏鬼灭之刃限定版在BW的发布会亮相。发布会当天,知名博主普普通通tonyB560重炮手WIFI主板高能在线战甲锋芒,高光时刻掌控全场,稳赢战局带来一系列B560重炮手WIFI主板的实拍美照让你近距离了解这款利器!满血配置强势输出81供电模组和8PinProCool高强度供电接口,充分满海豚的动力动力方面,海豚搭载了比亚迪深度集成的八合一电驱总成,主销车型电机最大功率为70kW(95Ps),最大扭矩为180Nm,0100kmh加速为10。510。9秒,不过能耗比较低,百公里PS5国行上市,你有可能抢到吗?数码产品不能升值?因需求过于旺产能不足导致游戏主机PlayStation5在日本上市半年后依然供不应求在某大型拍卖网站价格竟比新品零售价高五成为啥PlayStation5这么受欢迎比亚迪全新纯电e平台3。0产品前不久,比亚迪又发布了全新纯电e平台3。0,进一步夯实了其在新能源市场的领先地位。e平台3。0是一个融合了智能高效安全美学四大产品特性的平台,基于该平台打造的新车解决了现有新能源汽宁愿等车也不买合资比亚迪到底对消费者施了什么魔法?就在所有车企都在为芯片紧缺造不出车而烦恼的时候,多年积蓄技术力量的比亚迪终于迎来了销量的井喷式爆发,在刚刚过去的2021年9月,比亚迪乘用车共销售79037辆,同比增长93。2,环假期出行趣享旅途,怎么能少了ROG降临2游戏耳机的陪伴呢?哈喽各位小可爱们51小长假马上就要来啦大家都准备去哪儿玩呢?一场说走就走的旅行当然少不了音乐与游戏的陪伴小R也给大家带来了ROG降临2标准版游戏耳机填充小可爱们旅途上的空白哦一起来ROG龙骑士2分离式无线双模键盘来啦各位小伙们好,在今天的新品发布会上,ROG经典分离式键盘的最新一代龙骑士2无线双模分离式键盘终于现真身了,虽然我们的中国区总经理俞元麟(Tony)先生(B站普普通通TONY大叔)和