我们在做技术接口时,尤其对外提供时,为了提高服务接口的安全(防爆破,防重放,防篡改等)一般会采用接口验证的方式,但是在验证的时候为了提升参数请求前后的安全,我们会采用加密。普通加密基本都是对称的,不能逆向。
下面,我介绍一种rsa的算法,通过这个加密算法实现接口请求前后的数字签名验证。具体实现流程为:
接口数字签名验证的而基本流程
下面我将rsa的签名算法代码分享下,下载即用:
public class rsaencrypt { private static map<integer, string> keymap = new hashmap<integer, string>(); //用于封装随机产生的公钥与私钥 private static string pirvatekey="miibuwibadanbgkqhkig9w0baqefaascat0wgge5ageaakeags8vf8ekvf9yoqoyhfy4hhgypnkskrrmkjrfrkezhfzwfx2ccoon74qz3qw15vv9jmd5dwapdmvavx5hcknurwidaqabakbps6fwd4pwmini4usula1shdmqfc0pycisd8odbrattjrv6w9oh+a/cikdir4dz0pss9qh0mxb0bthrq9vs0wbaieax+y2vcrbnoznqswuonzcvkihazkrawxobr8mqfjnoucciqclavcvg0skwv65vs2zr0quqnafdccmh7b4gm2dcnaqigasxgvy3jv+hd1/j6fnnuuoqw0cbp1sofsmh9mlr3xy8cifeygex9cay/vstwalws3pmbgxxy2jdb2u6q86vx5rubaibhoiuoyrxrs77ifdfm1kyfhrpyznstyjhcvu4u5kwwia=="; private static string publickey="mfwwdqyjkozihvcnaqebbqadswawsajbaievfx/hilx/wkkqmorcuir4gktzepk65pca36ynmr32vhcdnaqkj++egd6snevvfyza+q1mj3tfqfcer3jdveccaweaaq=="; private static string ssb="fsauucym3fi3eyjwzrpxni1dbwclt3bfuql5wsdv24qtlmymrn2i5wrkqggxmtewrj78obf1zke9rtpe+23zzw=="; public static void main(string[] args) throws exception { //生成公钥和私钥 //genkeypair(); //string randomstr= randomstrutil.getran武汉保卫战dom(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 curerandom()); // 生成一个密钥对,保存在keypair中 keypair keypair = keypairgen.generatekeypair(); // 得到私钥 rsaprivatekey privatekey = (rsaprivatekey) keypair.getprivate(); // 得到公钥 rsapublickey publickey = (rsapublickey) keypair.getpublic(); string publickeystring = new string(ba64.encodeba64(publickey.绩效指标getencoded())); system.out.println("公钥="+publickeystring); // 得到私钥字符串 string privatekeystring = new string(ba64.encodeba64((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{ //ba64编八万里码的公钥 byte[] decoded = ba64.decodeba64(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 = ba64.encodeba64string(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{ //64位解码加密后的字符串 byte[] inputbyte = ba64.decodeba64(str.getbytes("utf-8")); //ba64编码的私钥 byte[] decoded = ba64.decodeba64(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; }}
本文发布于:2023-04-05 02:28:35,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/ae3fccce5417bf76b9e85428a1001310.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:java非对称加密算法(java代码大全及详解).doc
本文 PDF 下载地址:java非对称加密算法(java代码大全及详解).pdf
留言与评论(共有 0 条评论) |