RSA JAVA 版本

来源:互联网 发布:基础设施网络建设 编辑:程序博客网 时间:2024/06/05 20:54

这里给出RSA的加密解密代码,DSA的加解密代码请查阅我整理的安全文档电子书


package base_crypt;import java.math.BigInteger;import java.security.Key;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.Signature;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import java.security.spec.RSAPrivateKeySpec;import java.security.spec.RSAPublicKeySpec;import java.util.Arrays;import javax.crypto.Cipher;public class base_rsa {//public static KeyPair base_rsa_private static String RSA_SIGN_MD5 = "MD5withRSA";private static String RSA_SIGN_SHA1 = "SHA1withRSA";private static String RSA_SIGN_SHA256 = "SHA256withRSA";public static KeyPair base_rsa_generater(int rsa_len){try{KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");keygen.initialize(rsa_len);KeyPair key = keygen.generateKeyPair();return key;}catch(Exception e){return null;}}public static KeyPair base_rsa_generater(String p_n,String p_e,String p_d){try{BigInteger n = new BigInteger(p_n,16);BigInteger e = new BigInteger(p_e,16);BigInteger d = new BigInteger(p_d,16);KeyFactory keyfac = KeyFactory.getInstance("RSA");RSAPublicKeySpec pubkeyspec = new RSAPublicKeySpec(n,d);RSAPrivateKeySpec prikeyspec = new RSAPrivateKeySpec(n, e);RSAPublicKey pubkey = (RSAPublicKey)keyfac.generatePublic(pubkeyspec);RSAPrivateKey prikey = (RSAPrivateKey)keyfac.generatePrivate(prikeyspec);KeyPair key = new KeyPair((PublicKey)pubkey,(PrivateKey)prikey);return key;}catch(Exception e){return null;}}public static byte[] base_rsa_encrypt(byte[] s_buf,int s_len,Key key,int key_len){try{Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, key);int data_len = key_len - 11;int num = s_len/data_len;if(data_len *num < s_len)num++;byte[] d_buf  = new byte[key_len * num];int last = 0,cur = 0,d_cur=0;for(int i=0;i<num;i++){cur = i*data_len;last = s_len - cur;last = last > data_len ?data_len:last;byte[] r_buf = cipher.doFinal(s_buf,cur,last);for(int j=0;j<r_buf.length;j++){d_buf[d_cur+j] = r_buf[j];}d_cur += r_buf.length;}return d_buf;}catch(Exception e){return null;}}public static byte[] base_rsa_decrypt(byte[] s_buf,int s_len,Key key,int key_len){try{Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, key);int data_len = key_len;int num = s_len/data_len;if(data_len *num < s_len)num++;byte[] tmp_buf  = new byte[s_len];int last = 0,cur = 0,d_cur=0;for(int i=0;i<num;i++){cur = i*data_len;last = s_len - cur;last = last > data_len ?data_len:last;byte[] r_buf = cipher.doFinal(s_buf,cur,last);for(int j=0;j<r_buf.length;j++){tmp_buf[d_cur+j] = r_buf[j];}d_cur += r_buf.length;}byte[] d_buf = Arrays.copyOfRange(tmp_buf, 0,d_cur);return d_buf;}catch(Exception e){return null;}}public static byte[] base_rsa_publickey_encrypt(byte[] s_buf,int s_len,KeyPair p_key){RSAPublicKey pubkey = (RSAPublicKey)p_key.getPublic();int key_len = pubkey.getModulus().bitLength();//.bitCount();key_len = key_len /8;return base_rsa_encrypt(s_buf, s_len, pubkey, key_len);}public static byte[] base_rsa_publickey_decrypt(byte[] s_buf,int s_len,KeyPair p_key){RSAPublicKey pubkey = (RSAPublicKey)p_key.getPublic();int key_len = pubkey.getModulus().bitLength();//.bitCount();key_len = key_len /8;return base_rsa_decrypt(s_buf, s_len, pubkey, key_len);}public static byte[] base_rsa_privatekey_encrypt(byte[] s_buf,int s_len,KeyPair p_key){RSAPrivateKey prikey = (RSAPrivateKey)p_key.getPrivate();int key_len = prikey.getModulus().bitLength();//.bitCount();key_len = key_len /8;return base_rsa_encrypt(s_buf, s_len, prikey, key_len);}public static byte[] base_rsa_privatekey_decrypt(byte[] s_buf,int s_len,KeyPair p_key){RSAPrivateKey prikey = (RSAPrivateKey)p_key.getPrivate();int key_len = prikey.getModulus().bitLength();//.bitCount();key_len = key_len /8;return base_rsa_decrypt(s_buf, s_len, prikey, key_len);}public static byte[] base_rsa_privatekey_sign(byte[] s_buf,int s_len,PrivateKey p_key,String sign_type){try{Signature sign = Signature.getInstance(sign_type);sign.initSign(p_key);sign.update(s_buf,0,s_len);return sign.sign();}catch(Exception e){return null;}}public static boolean base_rsa_publickey_verify(byte[] s_buf,int s_len,byte[] sign_buf,int sign_len,PublicKey p_key,String sign_type){try{Signature sign = Signature.getInstance(sign_type);sign.initVerify(p_key);sign.update(s_buf,0,s_len);return sign.verify(sign_buf, 0, sign_len);}catch(Exception e){return false;}}public static byte[] base_rsa_privatekey_sign_md5(byte[] s_buf,int s_len,PrivateKey p_key){return base_rsa_privatekey_sign(s_buf,s_len,p_key,RSA_SIGN_MD5);}public static boolean base_rsa_publickey_verify_md5(byte[] s_buf,int s_len,byte[] sign_buf,int sign_len,PublicKey p_key){return base_rsa_publickey_verify(s_buf,s_len,sign_buf,sign_len,p_key,RSA_SIGN_MD5);}public static byte[] base_rsa_privatekey_sign_sha1(byte[] s_buf,int s_len,PrivateKey p_key){return base_rsa_privatekey_sign(s_buf,s_len,p_key,RSA_SIGN_SHA1);}public static boolean base_rsa_publickey_verify_sha1(byte[] s_buf,int s_len,byte[] sign_buf,int sign_len,PublicKey p_key){return base_rsa_publickey_verify(s_buf,s_len,sign_buf,sign_len,p_key,RSA_SIGN_SHA1);}public static byte[] base_rsa_privatekey_sign_sha256(byte[] s_buf,int s_len,PrivateKey p_key){return base_rsa_privatekey_sign(s_buf,s_len,p_key,RSA_SIGN_SHA256);}public static boolean base_rsa_publickey_verify_sha256(byte[] s_buf,int s_len,byte[] sign_buf,int sign_len,PublicKey p_key){return base_rsa_publickey_verify(s_buf,s_len,sign_buf,sign_len,p_key,RSA_SIGN_SHA256);}}


0 0
原创粉丝点击