`

License java

    博客分类:
  • java
 
阅读更多
public abstract class MyRSACoder {
	public static final String KEY_ALGORITHM = "RSA";
	public static final String KEY_PROVIDER = "BC";
	public static final String SIGNATURE_ALGORITHM = "SHA1WithRSA";

	/**
	 * 初始化密钥对
	 */
	public static Map<String, Object> initKeys(String seed) throws Exception {
		
		Map<String, Object> keyMap = new HashMap<String, Object>();
		Security.addProvider(new BouncyCastleProvider());
		KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM,KEY_PROVIDER);
		
		keyPairGenerator.initialize(1024,new SecureRandom(seed.getBytes()));
		KeyPair pair = keyPairGenerator.generateKeyPair();
		RSAPublicKey rsaPublicKey = (RSAPublicKey) pair.getPublic();
		RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) pair.getPrivate();
		
		KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM,KEY_PROVIDER);
		RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(rsaPublicKey.getModulus().toString()),new BigInteger(rsaPublicKey.getPublicExponent().toString()));
		RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(new BigInteger(rsaPrivateKey.getModulus().toString()),new BigInteger(rsaPrivateKey.getPrivateExponent().toString()));
		
		PublicKey publicKey = factory.generatePublic(pubKeySpec);
		PrivateKey privateKey = factory.generatePrivate(priKeySpec);

		System.out.println("公钥:" + pubKeySpec.getModulus() + "----" + pubKeySpec.getPublicExponent());
		System.out.println("私钥:" + priKeySpec.getModulus() + "----" + priKeySpec.getPrivateExponent());
		keyMap.put("publicKey", publicKey);
		keyMap.put("privateKey", privateKey);
		
		return keyMap;
	}
	
	/**
	 * 私钥加密
	 * */
	public static byte[] encryptRSA(byte[] data,PrivateKey privateKey) throws Exception {
		
		Cipher cipher = Cipher.getInstance(KEY_ALGORITHM,KEY_PROVIDER);
		cipher.init(Cipher.ENCRYPT_MODE, privateKey);
		int dataSize = cipher.getOutputSize(data.length);
		int blockSize = cipher.getBlockSize();
		int blockNum = 0;
		if (data.length % blockSize == 0) {
			blockNum = data.length / blockSize;
		} else {
			blockNum = data.length / blockSize + 1;
		}
		byte[] raw = new byte[dataSize * blockNum];
		int i = 0;
		while (data.length - i * blockSize > 0) {
			if (data.length - i * blockSize > blockSize) {
				cipher.doFinal(data, i * blockSize, blockSize, raw, i * dataSize);
			} else {
				cipher.doFinal(data, i * blockSize, data.length - i * blockSize, raw, i * dataSize);
			}
			i++;
		}
		
		return raw;
	}
	
	/**
	 * 生成数字签名
	 * */
	public static String sign(byte[] encoderData,PrivateKey privateKey) throws Exception {
		
		Signature sig = Signature.getInstance(SIGNATURE_ALGORITHM,KEY_PROVIDER);
		sig.initSign(privateKey);
		sig.update(encoderData);
		
		return new String(Base64.encode(sig.sign()));
	}
	
	/**
	 * 校验数字签名
	 * */
	public static boolean verify (byte[] encoderData,String sign,PublicKey publicKey) throws Exception {
		
		Signature sig = Signature.getInstance(SIGNATURE_ALGORITHM,KEY_PROVIDER);
		sig.initVerify(publicKey);
		sig.update(encoderData);
		
		return sig.verify(Base64.decode(sign));
	}




main
public class MyRSACoderTest {

	public static void main(String[] args) throws Exception {
		
		Map<String, Object> keyMap = MyRSACoder.initKeys("0");
		PublicKey publicKey = (PublicKey) keyMap.get("publicKey");
		PrivateKey privateKey = (PrivateKey) keyMap.get("privateKey");
		
		String str = "您好!";
		byte[] encoderData = MyRSACoder.encryptRSA(str.getBytes(), privateKey);
		String sign = MyRSACoder.sign(encoderData, privateKey);
		boolean status = MyRSACoder.verify(encoderData, sign, publicKey);
		
		System.out.println("原文:" + str);
		System.out.println("密文:" + new String(encoderData));
		System.out.println("签名:" + sign);
		System.out.println("验证结果:" + status);
	}
}



java中使用公钥加密私钥解密原理实现license控制
现在很多J2EE应用都采用一个license文件来授权系统的使用,特别是在系统购买的早期,会提供有限制的license文件对系统进行限制,比如试用版有譬如IP、日期、最大用户数量的限制等。而license控制的方法又有很多,目前比较流行,只要设计的好就很难破解的方法就是采用一对密匙(私匙加密公匙解密)来生成License文件中的Sinature签名内容,再通过Base64或Hex来进行编码。比如原BEA公司现在是Oracle公司的WebLogic就采用的是这种方法来设置License文件。 
这里只进行一个比较简单的实现: 
一共三个类: 
A.KeyGenerater类生成公钥私钥对 
B.Signaturer类使用私钥进行签名 
C.SignProvider类用公钥验证
分享到:
评论

相关推荐

    Java实现的license生成器

    本文将深入探讨如何使用Java语言来实现一个自定义的License生成器,并结合图形化用户界面(GUI)来提升用户体验。以下是对该主题的详细阐述: 一、Java源码实现License生成器 1. 数据结构:首先,我们需要定义一个...

    可在线激活的软件license java实现源码

    管理软件的license源码,可以根据安装的机器授权软件的使用的license,并提供在线激活功能。确保只能在授权的机器上使用,以及仅能使用授权的功能。确保一个license被多台机器使用,或者多个用户共用。本程序还可以...

    JAVA 编写的 License生成器(JAVA源码+运行bat)

    1. JAVA 编写的 License生成器 2. 采用rsa非对称密钥算法。 3. 打包成jar直接运行。 4. 自动创建明文txt文件,修改后进行一键加密,生成License文件。 5. 优秀的界面操作。 6. 具有较好的不可复制性。

    java license

    Java许可证(License)是软件开发中的一个重要组成部分,它定义了软件的使用、分发和修改规则。本程序通过Java语言实现,提供了许可证的生成和管理功能,对于理解软件授权机制和进行实际应用具有很高的价值。下面...

    java web springboot License生成器 (JAVA源码+图形界面)

    保证java web ,spirngboot,tomcate web安全,可以现在IP,mac,自定义参数,License生成器 (JAVA源码+界面) 其中包括license授权机制的原理和制作license的具体步骤 增加了mac 地址验证

    lic.zip_License java_The Number_java license_license

    JLicense is feature based, and you can validate the license based on the features. For example, you can add features like IP address, MAC address, user number etc.

    java版aspose-pdf相关jar和license.xml资源

    使用java版的aspose-pdf,处理pdf文件,亲测pdf转换图片无水印,无时间限制,压缩包包含aspose-pdf相关jar包和license.xml。警告:请勿用于商业用途,仅供学习研究,如有任何版权纠纷,本人概不负责!

    JAVA中license控制实现示例.doc

    JAVA中license控制实现示例 在 Java 中,license 控制是指通过生成和验证数字签名来控制软件的使用权限。这种方法广泛应用于 J2EE 应用中,特别是在系统购买的早期,提供有限制的 license 文件对系统进行限制。 在...

    java license生成验证的实现

    java license生成验证的实现

    Java web License 保护我们的java项目

    web系统Licence验证 保证java web ,可以现在IP,mac,自定义参数,License生成器 (JAVA源码+界面) 其中包括license授权机制的原理和制作license的具体步骤 增加了mac 地址验证

    JAVA-license-control-demo.zip_License生成_java license_java licens

    本篇将详细探讨`JAVA-license-control-demo.zip`提供的`License`生成和验证的Java实现示例,以及其中包含的文档`JAVA中license控制实现示例.doc`。 首先,我们要理解`License`生成的核心概念。在Java中,通常通过...

    java中使用公钥加密私钥解密原理实现license控制

    Java 中使用公钥加密私钥解密原理实现 License 控制 Java 中使用公钥加密私钥解密原理实现 License 控制是指在 Java 应用程序中使用公钥加密、私钥解密机制来实现 License 文件的控制。这种机制可以用来限制系统的...

    jar java用aspose.word18.8带license

    在"jar java用aspose.word18.8带license"这个主题中,我们主要讨论的是如何在Java项目中使用Aspose.Word 18.8版本,并且该版本带有许可证,这确保了合法使用和商业部署。 Aspose.Word是一个完全独立的库,无需安装...

    使用truelicense实现用于JAVA工程license机制(包括license生成和验证)

    在Java开发中,为了保护软件不被非法使用,开发者通常会采用授权许可(License)机制。TrueLicense是一款强大的开源工具,专门用于构建Java应用程序的许可证管理解决方案。它提供了灵活的API,可以方便地集成到你的...

    open license

    "Open License"是一种开源软件许可协议,它允许用户免费使用、修改、复制和分发软件。这个主题涉及到的是开源社区的核心原则,即源代码的开放性和共享性。在这个描述中,“open source license builder with GUI”...

    JDK16-java-core-libraries-developer-guide.pdf

    Java Core Libraries开发者指南 Java Core Libraries是Java平台标准版的核心库,提供了大量的类和接口来实现各种...了解Java Core Libraries的使用和License是非常重要的,能够帮助开发者更好地使用Java平台标准版。

    License生成器 (JAVA源码+运行bat)

    1. JAVA 编写的 License生成器 2. 采用rsa非对称密钥算法。 3. 打包成jar直接运行。 4. 自动创建明文txt文件,修改后进行一键加密,生成License文件。 5. 优秀的界面操作。 6. 具有较好的不可复制性。

    db2jcc_license_cu/db2java/db2jcc

    标题中的"db2jcc_license_cu/db2java/db2jcc"揭示了这些文件与IBM的DB2数据库连接器有关,特别是Java版本的驱动程序。DB2是IBM提供的一款关系型数据库管理系统,广泛用于企业级的数据存储和管理。在Java环境中,为了...

    license 生成license文件demo

    在IT行业中,许可证(License)文件是软件发布者用来控制软件使用权限的重要工具。它定义了用户可以如何使用、分发以及修改软件的各种条件。在这个"license 生成license文件demo"中,我们主要关注的是如何生成这样的...

    java版aspose-slides相关jar和license.xml

    使用java版的aspose-slides,处理excel文件,亲测ppt,pptx转换图片无水印,无时间限制,压缩包包含aspose-slides相关jar包和破解文件license.xml。警告:请勿用于商业用途,仅供学习研究,如有任何版权纠纷,本人概...

Global site tag (gtag.js) - Google Analytics