java非对称加密算法 java代码大全及详解

我们在做技术接口的时候,尤其是对外提供的时候,为了提高服务接口的安全性(防爆炸、防重放、防篡改等。),我们通常使用接口验证,但是为了提高参数请求前后的安全性,我们使用了加密。普通加密基本是对称的,不能反转。下面,我介绍一种RSA的算法,通过这个加密算法实现接口...

我们在做技术接口的时候,尤其是对外提供的时候,为了提高服务接口的安全性(防爆炸、防重放、防篡改等。),我们通常使用接口验证,但是为了提高参数请求前后的安全性,我们使用了加密。普通加密基本是对称的,不能反转。

下面,我介绍一种RSA的算法,通过这个加密算法实现接口请求前后的数字签名验证。具体实现流程为:

接下来我介绍一个RSA算法,可以验证接口请求前后的数字签名。实现过程如下:

接口数字签名验证的基本流程

下面我分享RSA的签名算法代码,可以下载后立即使用:

public class RSAEncrypt { private static Map<Integer, String> keyMap = new HashMap<Integer, String>(); //用于封装随机产生的公钥与私钥 private static String pirvateKey="MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAgS8Vf8eKVf9YoqoyhFy4hHgYpNkSkrrmkJrfrKeZHfZWFx2cCoon74QZ3qw15VV9jMD5DWaPdMV***x5HckNURwIDAQABAkBpS6Fwd4pwMiNi4usuLA1SHDmqFC0pYCISd8odBratTjRv6w9OH+A/CIKDir4DZ0PsS9qh0mxb0bthRQ9vS0wBAiEAx+y2VcrbnOZNQSWUONZcVKIHazkrAWXOBR8mQfJnOUcCIQClavCvg0SesKWv65vs2ZR0quQnaFdcCMh7B4GM2DCNAQIgAsXgvY3jv+hd1/J6fNNUUoQw0Cbp1sof***h9Mlr3XY8CIFEyGex9Cay/VsTwaLws***MbgxxY2jDB2u6Q86VX5RUBAiBhoiUOYrxrS77ifDFm1KYFHRPyZNStYJhcVu4U5kwwIA=="; private static String publicKey="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIEvFX/HilX/WKKqMoRcuIR4GKTZEpK65pCa36ynmR32VhcdnAqKJ++EGd6sNeVVfYzA+Q1mj3TFQFceR3JDVEcCAwEAAQ=="; private static String s***="fSAUUCYm3FI3EYJWZRPXnI1dbwcLT3bFUqL5Wsdv24QtLmYmrN2i5WRKQgGxMTewRJ78Obf1Zke9rTpE+23zzw=="; public static void ***in(String[] args) throws Exception { //生成公钥和私钥 //genKeyPair(); //String randomStr= RandomStrUtil.getRandom(24, RandomStrUtil.TYPE.LETTER_CAPITAL_NUMBER); String uuid=UUIDUtil.getUUID(); String hashCode=String.valueOf(uuid.hashCode()); System.out.println("hashcode="+hashCode); long time=System.currentTimeMillis(); //System.out.println("随机hash"+hashCode); //加密字符串 String message = time+"@=@"+uuid; //System.out.println("随机生成的公钥为:" + publicKey); //System.out.println("随机生成的私钥为:" + pirvateKey); String messageEn = encrypt(message,publicKey); System.out.println("加密后的字符串为:" + messageEn); String messageDe = decrypt(messageEn,pirvateKey); System.out.println("源文数据="+message); System.out.println("解密数据=" + messageDe); String bs=messageDe.split("@=@")[1]; System.out.println(bs); } /** * 随机生成密钥对 * @throws NoSuchAlgorithmException */ public static void genKeyPair() throws NoSuchAlgorithmException { // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); // 初始化密钥对生成器,密钥大小为96-1024位 keyPairGen.initialize(1024,new SecureRandom()); // 生成一个密钥对,保存在keyPair中 KeyPair keyPair = keyPairGen.generateKeyPair(); // 得到私钥 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 得到公钥 RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); String publicKeyString = new String(Base***.encodeBase***(publicKey.getEncoded())); System.out.println("公钥="+publicKeyString); // 得到私钥字符串 String privateKeyString = new String(Base***.encodeBase***((privateKey.getEncoded()))); System.out.println("私钥="+privateKeyString); // 将公钥和私钥保存到Map //0表示公钥 keyMap.put(0,publicKeyString); //1表示私钥 keyMap.put(1,privateKeyString); } /** * RSA公钥加密 * * @param str * 加密字符串 * @param publicKey * 公钥 * @return 密文 * @throws Exception * 加密过程中的异常信息 */ public static String encrypt( String str, String publicKey ) throws Exception{ //base***编码的公钥 byte[] decoded = Base***.decodeBase***(publicKey); RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); //RSA加密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pubKey); String outStr = Base***.encodeBase***String(cipher.doFinal(str.getBytes("UTF-8"))); return outStr; } /** * RSA私钥解密 * * @param str * 加密字符串 * @param privateKey * 私钥 * @return 铭文 * @throws Exception * 解密过程中的异常信息 */ public static String decrypt(String str, String privateKey) throws Exception{ //***位解码加密后的字符串 byte[] inputByte = Base***.decodeBase***(str.getBytes("UTF-8")); //base***编码的私钥 byte[] decoded = Base***.decodeBase***(privateKey); RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); //RSA解密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, priKey); String outStr = new String(cipher.doFinal(inputByte)); return outStr; }}

本文来自玩味不尽投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/501407.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 04-12
下一篇 04-12

相关推荐

  • 数据挖掘概念与技术第三版pdf 数据挖掘原理与算法第三版

    前不久我们的推荐算法还不够精准?让知识图谱解决”和“如何将知识图谱特征学习应用于推荐系统”的系列文章受到了同学们的广泛欢迎。大家都很关心推荐系统及其相关的底层数据挖掘技术。为了帮助朋友们更好地学习相关内容,我们邀请了微软亚洲研究院社会计算组研究员张福正为大

    2023-07-28 06:09:01
    984 0
  • 遗传算法matlab程序源代码 遗传算法经典实例

    旅行商问题(TSP),即求解城市路线的最优组合,要求每个城市只走一次,目的地城市与出发城市相同,最终行程要最短。在传统遗传算法的基础上,对其进行了改进和优化,提出了一种带精英保留的协同进化遗传算法。以30、50、75城市为例,对两者进行对比。该算法的运行流程如图1所示

    2023-07-28 06:00:01
    785 0
  • de算法的稳定性 De与ga算法区别

    DES算法的定义DES被称为数据加密标准,即数据加密标准。它是一种使用密钥加密的分组算法,是IBM在1972年开发的对称密码系统加密算法。其密钥长度为56位,明文按***位分组,分组后的明文组与56位密钥逐位替换或交换,形成密文组。DES算法的历史美国国家标准局于1973年开始研究

    2023-07-19 17:52:01
    689 0
  • hash算法有哪几种 hash值的计算方式

    好的哈希算法有什么特点?注意,有许多散列算法,如MD5、SHA-1、SHA-2等。、SHA-256和BTC的RIPEMD-160等。至少有两个特点:1.对于任何两个不同的输入,应该产生不同的输出。(这叫防撞)2.向前计算很容易,而从输出向后输入非常困难。只能靠暴力猜测。(这被称为不可逆性)看第一个

    2023-07-16 00:44:01
    760 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信