java非对称加密算法(java代码大全及详解)
程序员文章站
2023-11-12 17:29:22
我们在做技术接口时,尤其对外提供时,为了提高服务接口的安全(防爆破,防重放,防篡改等)一般会采用接口验证的方式,但是在验证的时候为了提升参数请求前后的安全,我们会采用加密。普通加密基本都是对称的,不能...
我们在做技术接口时,尤其对外提供时,为了提高服务接口的安全(防爆破,防重放,防篡改等)一般会采用接口验证的方式,但是在验证的时候为了提升参数请求前后的安全,我们会采用加密。普通加密基本都是对称的,不能逆向。
下面,我介绍一种rsa的算法,通过这个加密算法实现接口请求前后的数字签名验证。具体实现流程为:
接口数字签名验证的而基本流程
下面我将rsa的签名算法代码分享下,下载即用:
public class rsaencrypt {
private static map<integer, string> keymap = new hashmap<integer, string>(); //用于封装随机产生的公钥与私钥
private static string pirvatekey="miibuwibadanbgkqhkig9w0baqefaascat0wgge5ageaakeags8vf8ekvf9yoqoyhfy4hhgypnkskrrmkjrfrkezhfzwfx2ccoon74qz3qw15vv9jmd5dwapdmvavx5hcknurwidaqabakbps6fwd4pwmini4usula1shdmqfc0pycisd8odbrattjrv6w9oh+a/cikdir4dz0pss9qh0mxb0bthrq9vs0wbaieax+y2vcrbnoznqswuonzcvkihazkrawxobr8mqfjnoucciqclavcvg0seskwv65vs2zr0quqnafdccmh7b4gm2dcnaqigasxgvy3jv+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.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(base64.encodebase64(publickey.getencoded()));
system.out.println("公钥="+publickeystring);
// 得到私钥字符串
string privatekeystring = new string(base64.encodebase64((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{
//base64编码的公钥
byte[] decoded = base64.decodebase64(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 = base64.encodebase64string(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 = base64.decodebase64(str.getbytes("utf-8"));
//base64编码的私钥
byte[] decoded = base64.decodebase64(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;
}
}
上一篇: 多备份一行:屌丝站长有感而发
下一篇: List集合方法实例演示