java RSA加密生成license,用CPU序列号生成机器码
2019独角兽企业重金招聘Python工程师标准>>>
?
license里就是一些注册信息,键值对组成的字符串
?
对称加密:
DES,AES,加密解密都用一个秘钥,速度快
非对称机密
RSA,可以私钥加密公钥解密,也可以公钥机密私钥解密,速度慢
注意:
RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行。
RSA加密对明文的长度是有限制的,如果加密数据过大会抛出异常:
?
常见加密算法
DES?
??? DES是Data Encryption Standard(数据加密标准)的缩写,DES算法为密码体制中的对称密码体制。它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准,二十年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。
??? DES是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密匙长度是56位(因为每个第8位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变。其中有极少量的数被认为是弱密匙,但是很容易避开他们。所以保密性依赖于密钥。
??? 特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。
DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间。
??? DES现在已经不视为一种安全的加密算法,因为它使用的56位秘钥过短,以现代计算能力,24小时内即可能被破解。也有一些分析报告提出了该算法的理论上的弱点,虽然实际情况未必出现。该标准在最近已经被高级加密标准(AES)所取代。
?
AES
??? 高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
??? AES的区块长度固定为128 位元,密钥长度则可以是128,192或256位元。
?
RSA
??? RSA加密算法是一种非对称加密算法。在公钥加密标准和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
??? RSA算法的可靠性基于分解极大的整数是很困难的。假如有人找到一种很快的分解因子的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
??? RSA算法利用两个很大的质数相乘所产生的乘积来加密。这两个质数无论哪一个先与原文件编码相乘,对文件加密,均可由另一个质数再相乘来解密。但要用一个质数来求出另一个质数,则是十分困难的。因此将这一对质数称为密钥对(Key Pair)。在加密应用时,某个用户总是将一个密钥公开,让需发信的人员将信息用其公共密钥加密后发给该用户,而一旦信息加密后,只有用该用户一个人知道的私用密钥才能解密。具有数字凭证身份的人员的公共密钥可在网上查到,亦可在请对方发信息时主动将公共密钥传给对方,这样保证在Internet上传输信息的保密和安全。
?
本文采用RSA加密算法加密license信息,可以运行RSATester.java生成公钥和私钥。
RSAUtils.java
<pre name="code" class="java">import java.io.ByteArrayOutputStream; 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.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.HashMap; import java.util.Map; import javax.crypto.Cipher; /** *//** * <p> * RSA公钥/私钥/签名工具包 * </p> * <p> * 罗纳德·李维斯特(Ron [R]ivest)、阿迪·萨莫尔(Adi [S]hamir)和伦纳德·阿德曼(Leonard [A]dleman) * </p> * <p> * 字符串格式的密钥在未在特殊说明情况下都为BASE64编码格式<br/> * 由于非对称加密速度极其缓慢,一般文件不使用它来加密而是使用对称加密,<br/> * 非对称加密算法可以用来对对称加密的密钥加密,这样保证密钥的安全也就保证了数据的安全 * </p> * * @author IceWee * @date 2012-4-26 * @version 1.0 */ public class RSAUtils { /** *//** * 加密算法RSA */ public static final String KEY_ALGORITHM = "RSA"; /** *//** * 签名算法 */ public static final String SIGNATURE_ALGORITHM = "MD5withRSA"; /** *//** * 获取公钥的key */ private static final String PUBLIC_KEY = "RSAPublicKey"; /** *//** * 获取私钥的key */ private static final String PRIVATE_KEY = "RSAPrivateKey"; /** *//** * RSA最大加密明文大小 */ private static final int MAX_ENCRYPT_BLOCK = 117; /** *//** * RSA最大解密密文大小 */ private static final int MAX_DECRYPT_BLOCK = 128; /** *//** * <p> * 生成密钥对(公钥和私钥) * </p> * * @return * @throws Exception */ public static Map<String, Object> genKeyPair() throws Exception { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); keyPairGen.initialize(1024); KeyPair keyPair = keyPairGen.generateKeyPair(); RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); Map<String, Object> keyMap = new HashMap<String, Object>(2); keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); return keyMap; } /** *//** * <p> * 用私钥对信息生成数字签名 * </p> * * @param data 已加密数据 * @param privateKey 私钥(BASE64编码) * * @return * @throws Exception */ public static String sign(byte[] data, String privateKey) throws Exception { byte[] keyBytes = Base64Utils.decode(privateKey); PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec); Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); signature.initSign(privateK); signature.update(data); return Base64Utils.encode(signature.sign()); } /** *//** * <p> * 校验数字签名 * </p> * * @param data 已加密数据 * @param publicKey 公钥(BASE64编码) * @param sign 数字签名 * * @return * @throws Exception * */ public static boolean verify(byte[] data, String publicKey, String sign) throws Exception { byte[] keyBytes = Base64Utils.decode(publicKey); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); PublicKey publicK = keyFactory.generatePublic(keySpec); Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); signature.initVerify(publicK); signature.update(data); return signature.verify(Base64Utils.decode(sign)); } /** *//** * <P> * 私钥解密 * </p> * * @param encryptedData 已加密数据 * @param privateKey 私钥(BASE64编码) * @return * @throws Exception */ public static byte[] decryptByPrivateKey(byte[] encryptedData, String privateKey) throws Exception { byte[] keyBytes = Base64Utils.decode(privateKey); PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key privateK = keyFactory.generatePrivate(pkcs8KeySpec); Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, privateK); int inputLen = encryptedData.length; ByteArrayOutputStream out = new ByteArrayOutputStream(); int offSet = 0; byte[] cache; int i = 0; // 对数据分段解密 while (inputLen - offSet > 0) { if (inputLen - offSet > MAX_DECRYPT_BLOCK) { cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK); } else { cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet); } out.write(cache, 0, cache.length); i++; offSet = i * MAX_DECRYPT_BLOCK; } byte[] decryptedData = out.toByteArray(); out.close(); return decryptedData; } /** *//** * <p> * 公钥解密 * </p> * * @param encryptedData 已加密数据 * @param publicKey 公钥(BASE64编码) * @return * @throws Exception */ public static byte[] decryptByPublicKey(byte[] encryptedData, String publicKey) throws Exception { byte[] keyBytes = Base64Utils.decode(publicKey); X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key publicK = keyFactory.generatePublic(x509KeySpec); Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, publicK); int inputLen = encryptedData.length; ByteArrayOutputStream out = new ByteArrayOutputStream(); int offSet = 0; byte[] cache; int i = 0; // 对数据分段解密 while (inputLen - offSet > 0) { if (inputLen - offSet > MAX_DECRYPT_BLOCK) { cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK); } else { cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet); } out.write(cache, 0, cache.length); i++; offSet = i * MAX_DECRYPT_BLOCK; } byte[] decryptedData = out.toByteArray(); out.close(); return decryptedData; } /** *//** * <p> * 公钥加密 * </p> * * @param data 源数据 * @param publicKey 公钥(BASE64编码) * @return * @throws Exception */ public static byte[] encryptByPublicKey(byte[] data, String publicKey) throws Exception { byte[] keyBytes = Base64Utils.decode(publicKey); X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key publicK = keyFactory.generatePublic(x509KeySpec); // 对数据加密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, publicK); int inputLen = data.length; ByteArrayOutputStream out = new ByteArrayOutputStream(); int offSet = 0; byte[] cache; int i = 0; // 对数据分段加密 while (inputLen - offSet > 0) { if (inputLen - offSet > MAX_ENCRYPT_BLOCK) { cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK); } else { cache = cipher.doFinal(data, offSet, inputLen - offSet); } out.write(cache, 0, cache.length); i++; offSet = i * MAX_ENCRYPT_BLOCK; } byte[] encryptedData = out.toByteArray(); out.close(); return encryptedData; } /** *//** * <p> * 私钥加密 * </p> * * @param data 源数据 * @param privateKey 私钥(BASE64编码) * @return * @throws Exception */ public static byte[] encryptByPrivateKey(byte[] data, String privateKey) throws Exception { byte[] keyBytes = Base64Utils.decode(privateKey); PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key privateK = keyFactory.generatePrivate(pkcs8KeySpec); Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, privateK); int inputLen = data.length; ByteArrayOutputStream out = new ByteArrayOutputStream(); int offSet = 0; byte[] cache; int i = 0; // 对数据分段加密 while (inputLen - offSet > 0) { if (inputLen - offSet > MAX_ENCRYPT_BLOCK) { cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK); } else { cache = cipher.doFinal(data, offSet, inputLen - offSet); } out.write(cache, 0, cache.length); i++; offSet = i * MAX_ENCRYPT_BLOCK; } byte[] encryptedData = out.toByteArray(); out.close(); return encryptedData; } /** *//** * <p> * 获取私钥 * </p> * * @param keyMap 密钥对 * @return * @throws Exception */ public static String getPrivateKey(Map<String, Object> keyMap) throws Exception { Key key = (Key) keyMap.get(PRIVATE_KEY); return Base64Utils.encode(key.getEncoded()); } /** *//** * <p> * 获取公钥 * </p> * * @param keyMap 密钥对 * @return * @throws Exception */ public static String getPublicKey(Map<String, Object> keyMap) throws Exception { Key key = (Key) keyMap.get(PUBLIC_KEY); return Base64Utils.encode(key.getEncoded()); } }
?
?Base64Utils.java
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;//import it.sauronsoftware.base64.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
//若报错,编译路径移除jdk,再添加jdk/** *//*** <p>* BASE64编码解码工具包* </p>* <p>* 依赖javabase64-1.3.1.jar 或 common-codec* </p>* * @author IceWee* @date 2012-5-19* @version 1.0*/
public class Base64Utils {/** *//*** 文件读取缓冲区大小*/private static final int CACHE_SIZE = 1024;/** *//*** <p>* BASE64字符串解码为二进制数据* </p>* * @param base64* @return* @throws Exception*/public static byte[] decode(String base64) throws Exception {//return Base64.decode(base64.getBytes());return new BASE64Decoder().decodeBuffer(base64);}/** *//*** <p>* 二进制数据编码为BASE64字符串* </p>* * @param bytes* @return* @throws Exception*/public static String encode(byte[] bytes) throws Exception {//return new String(Base64.encode(bytes));return new BASE64Encoder().encode(bytes);}/** *//*** <p>* 将文件编码为BASE64字符串* </p>* <p>* 大文件慎用,可能会导致内存溢出* </p>* * @param filePath 文件绝对路径* @return* @throws Exception*/public static String encodeFile(String filePath) throws Exception {byte[] bytes = fileToByte(filePath);return encode(bytes);}/** *//*** <p>* BASE64字符串转回文件* </p>* * @param filePath 文件绝对路径* @param base64 编码字符串* @throws Exception*/public static void decodeToFile(String filePath, String base64) throws Exception {byte[] bytes = decode(base64);byteArrayToFile(bytes, filePath);}/** *//*** <p>* 文件转换为二进制数组* </p>* * @param filePath 文件路径* @return* @throws Exception*/public static byte[] fileToByte(String filePath) throws Exception {byte[] data = new byte[0];File file = new File(filePath);if (file.exists()) {FileInputStream in = new FileInputStream(file);ByteArrayOutputStream out = new ByteArrayOutputStream(2048);byte[] cache = new byte[CACHE_SIZE];int nRead = 0;while ((nRead = in.read(cache)) != -1) {out.write(cache, 0, nRead);out.flush();}out.close();in.close();data = out.toByteArray();}return data;}/** *//*** <p>* 二进制数据写文件* </p>* * @param bytes 二进制数据* @param filePath 文件生成目录*/public static void byteArrayToFile(byte[] bytes, String filePath) throws Exception {InputStream in = new ByteArrayInputStream(bytes); File destFile = new File(filePath);
// if (!destFile.getParentFile().exists()) {
// destFile.getParentFile().mkdirs();
// }destFile.createNewFile();OutputStream out = new FileOutputStream(destFile);byte[] cache = new byte[CACHE_SIZE];int nRead = 0;while ((nRead = in.read(cache)) != -1) { out.write(cache, 0, nRead);out.flush();}out.close();in.close();}}
?
RSATester.java
import java.util.Map;public class RSATester {static String publicKey;static String privateKey;static {try {Map<String, Object> keyMap = RSAUtils.genKeyPair();publicKey = RSAUtils.getPublicKey(keyMap);privateKey = RSAUtils.getPrivateKey(keyMap);System.err.println("公钥: \n\r" + publicKey);System.err.println("私钥: \n\r" + privateKey);} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) throws Exception {test();testSign();}static void test() throws Exception {System.err.println("公钥加密——私钥解密");String source = "这是一行没有任何意义的文字,你看完了等于没看,不是吗?";System.out.println("\r加密前文字:\r\n" + source);byte[] data = source.getBytes();byte[] encodedData = RSAUtils.encryptByPublicKey(data, publicKey);System.out.println("加密后文字:\r\n" + new String(encodedData));byte[] decodedData = RSAUtils.decryptByPrivateKey(encodedData, privateKey);String target = new String(decodedData);System.out.println("解密后文字: \r\n" + target);}static void testSign() throws Exception {System.err.println("私钥加密——公钥解密");String source = "这是一行测试RSA数字签名的无意义文字";System.out.println("原文字:\r\n" + source);byte[] data = source.getBytes();byte[] encodedData = RSAUtils.encryptByPrivateKey(data, privateKey);System.out.println("加密后:\r\n" + new String(encodedData));byte[] decodedData = RSAUtils.decryptByPublicKey(encodedData, publicKey);String target = new String(decodedData);System.out.println("解密后: \r\n" + target);System.err.println("私钥签名——公钥验证签名");String sign = RSAUtils.sign(encodedData, privateKey);System.err.println("签名:\r" + sign);boolean status = RSAUtils.verify(encodedData, publicKey, sign);System.err.println("验证结果:\r" + status);}}
?
运行此类生成license?
LicenseGenerator.java
import java.io.File;/*** 生成license* @author zhao* 2014.6.15*/
public class LicenseGenerator {/*** serial:由客户提供* timeEnd:过期时间*/private static String licensestatic = "serial=568b8fa5cdfd8a2623bda1d8ab7b7b34;" +"timeEnd=1404057600000";private static final String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCaa8y9g+ioR2OSs8njT5uCGWm0YmOA1elSu/P5\n"+ "D3XYPCHsUPab74V5Og+NEZeTk9/LtG+jPSpKekTWm67gS2lQYWoygTwnoWsr4woaqNXmWw7L8Ty0\n"+ "LQFTojZgyynvu2RSIJp4c76z6SV/khiP/ireGtt8uzXPswPO5uaPU38tQQIDAQAB";/*** RSA算法* 公钥和私钥是一对,此处只用私钥加密*/public static final String privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJprzL2D6KhHY5KzyeNPm4IZabRi\n"+ "Y4DV6VK78/kPddg8IexQ9pvvhXk6D40Rl5OT38u0b6M9Kkp6RNabruBLaVBhajKBPCehayvjChqo\n"+ "1eZbDsvxPLQtAVOiNmDLKe+7ZFIgmnhzvrPpJX+SGI/+Kt4a23y7Nc+zA87m5o9Tfy1BAgMBAAEC\n"+ "gYAVnlfohEoTHQN0q1TtTNzRhutEhK23gLsMiSGr0Z1G64w4QFF2HT9LbHR25GqbD426QAWNDegY\n"+ "yytN/DesUQJqNXx8vuEuqs7+MQDgKgJqpAx+Fg3Iwsk/SVjq7meaSVGCgPKhtWHJk5oXoRMpsrlT\n"+ "AwUjpdpAZXIIKW3mrqkW0QJBANq4INw6lZlqRFtxT4uzYQYtzmB/nxMnCbL2SQ4ZQ/4CWlQpOnR/\n"+ "mH2JxIBCVtTADFlPM0DWF4aoqykYs9tu2X0CQQC0vgEk8DpkQbh1kgIyBGWCqYSKISTSXia0rbYo\n"+ "FPnzdldgtZVirNGNmiJGL8RPz0YKpZNOg9FLHq/oYXSNFI4VAkAJ4OcbC0pWc4ZC2wtMs/1d2hPI\n"+ "J/t3UfwOKTGDgYCgqFqMEpChUmIAyYgmgtiJI2NrZThbZVAKtPOGF6eH8anBAkAbxkL4wS3H8E1/\n"+ "S7OoqgJLZO9oJpW4+hzqkPM4D5klb58Xzm+pXTNKllAEBx0cwpZZ1n3fh+Qmrg2MIUW+1FTNAkBt\n"+ "WECowLUqW014M96WsFpiof7kjteOBNOjFyxhIbx2eT7//bnrADfq2Xu1/mSedUKrjGr/O+FRi7PO\n"+ "u7WhF6C9";public static void generator() throws Exception {System.err.println("私钥加密——公钥解密");//String source = "568b8fa5cdfd8a2623bda1d8ab7b7b34";System.out.println("原文字:\r\n" + licensestatic);byte[] data = licensestatic.getBytes();byte[] encodedData = RSAUtils.encryptByPrivateKey(data, privateKey);System.out.println("加密后:\r\n" + new String(encodedData)); //加密后乱码是正常的Base64Utils.byteArrayToFile(encodedData, FileUtil.getBasePath()+File.separator+"license.dat");System.out.println("license.dat:\r\n" + FileUtil.getBasePath()+File.separator+"license.dat");//解密byte[] decodedData = RSAUtils.decryptByPublicKey(encodedData, publicKey);String target = new String(decodedData);System.out.println("解密后: \r\n" + target);}public static void main(String[] args) throws Exception {generator();}
}
?
这里把解密逻辑也放这里了,实际上,公钥和机密逻辑应该放在软件运行的地方。
FileUtil.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.logging.Level;
import java.util.logging.Logger;/*** 文件工具类* @author zhao*/
public class FileUtil {/*** 获得类的基路径,打成jar包也可以正确获得路径* @return */public static String getBasePath(){/*/D:/zhao/Documents/NetBeansProjects/docCompare/build/classes//D:/zhao/Documents/NetBeansProjects/docCompare/dist/bundles/docCompare/app/docCompare.jar*/String filePath = FileUtil.class.getProtectionDomain().getCodeSource().getLocation().getFile();if (filePath.endsWith(".jar")){filePath = filePath.substring(0, filePath.lastIndexOf("/"));try {filePath = URLDecoder.decode(filePath, "UTF-8"); //解决路径中有空格%20的问题} catch (UnsupportedEncodingException ex) {}}File file = new File(filePath);filePath = file.getAbsolutePath();return filePath;}public static void main(String[] args) throws Exception {System.out.println(getBasePath());}
}
?
serial是软件运行的地方提供的,
纯java获取CPU序列号,生成机器码
http://happyqing.iteye.com/blog/2080402
?
参考
http://www.blogjava.net/icewee/archive/2012/05/19/378570.html
?
一个简单的RSA加密类
http://yuncode.net/code/c_5049f78253ad762
RSAEncrypt.java
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import javax.crypto.Cipher;/*** RSA加密类*/
public class RSAEncrypt {public static void main(String[] args) {try {RSAEncrypt encrypt = new RSAEncrypt();String encryptText = "12345678";KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");keyPairGen.initialize(1024);KeyPair keyPair = keyPairGen.generateKeyPair();// Generate keysRSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 私钥RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 公钥byte[] e = encrypt.encrypt(publicKey, encryptText.getBytes());byte[] de = encrypt.decrypt(privateKey, e);System.out.println(encrypt.bytesToString(e));System.out.println();System.out.println(encrypt.bytesToString(de));} catch (Exception e) {e.printStackTrace();}}/*** byte数组转为string* @param encrytpByte* @return*/protected String bytesToString(byte[] encrytpByte) {String result = "";for (Byte bytes : encrytpByte) {result += (char) bytes.intValue();}return result;}/*** 加密方法* @param publicKey* @param obj* @return*/protected byte[] encrypt(RSAPublicKey publicKey, byte[] obj) {if (publicKey != null) {try {Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey);return cipher.doFinal(obj);} catch (Exception e) {e.printStackTrace();}}return null;}/*** 解密方法* @param privateKey* @param obj* @return*/protected byte[] decrypt(RSAPrivateKey privateKey, byte[] obj) {if (privateKey != null) {try {Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);return cipher.doFinal(obj);} catch (Exception e) {e.printStackTrace();}}return null;}
}
?
说明:
公钥私钥要自己生成,别拷别人的
Over
?
?
转载于:https://my.oschina.net/ghm7753/blog/515726
java RSA加密生成license,用CPU序列号生成机器码相关推荐
- java RSA加密解密--转载
原文地址:http://www.blogjava.net/icewee/archive/2012/05/19/378570.html 该工具类中用到了BASE64,需要借助第三方类库:javabase ...
- JAVA——RSA加密与解密
基本概念 Base64:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. RSA: RSA加密算法是一种非对称加密算法 ...
- java RSA加密解密实现(含分段加密)
该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar 下载地址:http://download.csdn.net/detail/centralperk/50255 ...
- java rsa加密 加签_RSA加密解密与加签验签
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年7月首次在美国公布 ...
- Java RSA加密解密
转自 http://blog.csdn.net/bbld_/article/details/38777491 概述 RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数 ...
- java 在线rsa解密_通用的Java RSA加密工具类,可在线验证通过
/** * RSA加密工具类 * 使用PKCS1_PADDING填充,密钥长度1024 * 加解密结果在这里测试通过:http://tool.chacuo.net/cryptrsaprikey * 注 ...
- java rsa加密解密_前端实现对请求参数进行RSA加密amp;解密,针对字符串过长进行分段加密amp;分段解密的处理...
前言 在需求开发中,为了安全起见,我们都会难免遇到需要对一些敏感参数进行加密或者解密.所以,今天给大家分享的就是使用jsencrypt对请求参数进行RSA加密与解密,发这篇文章其实主要因为近期我的一位 ...
- JAVA——RSA加密【X509EncodedKeySpec、PKCS8EncodedKeySpec、RSAPublicKeySpec、RSAPrivateKeySpec】
基本概念 RSA加密算法:RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shami ...
- Java RSA加密(一)--BCD输出
代码如下: import java.math.BigInteger; import java.security.KeyFactory; import java.security.KeyPair; im ...
- android java rsa加密_Android RSA与Java RSA加密不一样标准产生问题的解决方法
最近作一个基于android的客户端,客户端与Java服务器 (MyEclipse自带的Tomcat服务器)的通讯须要实施安全方案.而本人是使用非对称密钥来对数据进行加密的,客户端用公钥加密,服务器用 ...
最新文章
- linux怎么和宿主机同步时间,Linux 中设置和同步时间
- Angular和SAP C4C的事件处理队列
- Python SqlAlchemy使用方法
- simulink显示多个数据_Stateflow数据介绍(一)
- 微信小程序- 初试小程序之tabbar(选项卡,底部导航)的使用
- 驱动人生服务器版本_电脑驱动怎么装?电脑刚装系统怎么装驱动?
- struts2中jsp页面上验证码的生成
- 电脑锁屏按什么键解锁_手机屏幕密码忘了怎么解锁
- linux拨号上网icp,如何用 Linux 拨号上网
- caffe 源码阅读与运行流程
- mysql查询一张表中一共有多少条数据
- Js拼接Json供echarts的地图使用
- 9月14日-全外显子组测序分析流程
- DOS批处理下格式化日期字符串
- Vue项目url中的BASE_URL解析
- 初中 昆虫记思维导图_《昆虫记》的思维导图
- CSS,HTML,JS 以及Vue前端面试题八股文总结【看完你就变高手】
- 那些花儿(夏洛特烦恼版)
- 沟通的技巧--爱因斯坦如何向老太太解释相对论
- 夜深人静写算法(三)- 初等数论入门
热门文章
- Rust───crates 国内镜像源配置
- Rust : CTP 中异步处理
- (转)拿到软银44亿美金巨资后,WeWork要这样布局中国市场
- 从心理学角度看,如何通过故事影响客户的决策?
- 【优化算法】寄生-捕食算法(PPA)【含Matlab源码 1801期】
- 【SDPVRP】基于matlab遗传算法求解同时取送货的车辆路径问题【含Matlab源码 1487期】
- 【疾病分类】基于matlab GUI模糊逻辑分类叶病严重程度分级系统【含Matlab源码 194期】
- unity和python哪个好学_纠结学习Python还是unity3d_课课家教育
- java适配器模式_java设计模式之适配器模式
- linux内核提高系统实时性,Linux操作系统实时性分析及改进策略