RSA指数模数加密

2019-04-14 16:29发布

package hbec.app.weisecurity.utils; import java.math.BigInteger; import java.net.URLDecoder; import java.net.URLEncoder; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; public class T { static final String mod="119013762783552790664444510344126639271924844701717173872088828066827617618352052423868797764101050671675010273300968086768952758222793093337410679638385758438181998828779151354457120185810439862646172407875625351933121940976586295594801107405021633366112226209939925716039327701639315656827458274941425368677"; static final String publicE="65537"; static final String privateE = "106917532045172255415411675710221707032269514269165514577919371366747681689703456650559215972034323501923156458960095779126430300336072236497450160586990533670480101946578693218455238274718168302034205034895891150713831453664198422986491449327196528842768860543017467669252798863303270185486892719101442835713"; public static void main(String[] args) throws Exception{ // 获取公私钥n BigInteger m = new BigInteger(mod); // 获取公钥e BigInteger pubE = new BigInteger(publicE); // 密文 BigInteger priE = new BigInteger(privateE); String test = "我123这个是测试"; test = URLEncoder.encode(test,"UTF-8");//解决中文乱码的问题 byte[] testByte = test.getBytes(); BigInteger testByteInt = new BigInteger(testByte); byte[] enTestByte = testByteInt.modPow(pubE, m).toByteArray();//将明文加密为密文 byte[] deTestByte = new BigInteger(enTestByte).modPow(priE, m).toByteArray();//将密文解密为明文 System.out.println(URLDecoder.decode(new String(deTestByte), "UTF-8")); } static void generateKeyPair(){ KeyPairGenerator keyPairGen = null; try { keyPairGen = KeyPairGenerator.getInstance("RSA"); } catch (NoSuchAlgorithmException e) { } keyPairGen.initialize(1024); KeyPair keyPair = keyPairGen.generateKeyPair(); RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); System.out.println("publicKey Mod: "+publicKey.getModulus()); System.out.println("publicKey Exp: "+publicKey.getPublicExponent()); System.out.println("privateKey Mod: "+privateKey.getModulus()); System.out.println("privateKey Exp: "+privateKey.getPrivateExponent()); } }