- 浏览: 25251 次
- 性别:
- 来自: 青岛
文章分类
最新评论
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类用公钥验证
发表评论
-
使用RestTemplate https时禁用证书检查
2018-11-29 11:17 1549private RestTemplate restTemp ... -
File.separator
2016-05-10 14:29 466在windows中的文件分隔符是 \ 和 /都可以 但是在L ... -
2016年5月10日System.setProperty
2016-05-10 14:08 429/* * 设置指定键对值的系统属性 * setPr ... -
java操作excel
2013-12-26 14:51 638jxl是一个韩国人写的java操作excel的工具, 在开源世 ... -
转 JAVA生成XML
2013-12-26 14:28 582http://pridesnow.iteye.com/blog ... -
(转)Hibernate的generator属性的意义
2013-12-26 10:51 698http://www.cnblogs.com/talo/art ... -
java socket编程
2013-12-17 14:05 637原文章 http://www.cnblogs. ... -
Struts2+Spring+hibernate最新版本官方下载地址
2013-12-16 17:11 873Struts2+Spring+hibernate最新版本官方下 ... -
java 调用webservice的各种方法总结(转)
2013-12-16 10:29 1009http://www.blogjava.net/zjhipho ... -
27个Java程序基本优化小提示
2013-11-28 19:09 6381.尽量指定类的final修饰符,因为带有final修饰符的类 ... -
对象排序:Comparator&Comparable
2013-11-28 17:56 528public class UserPo { ...
相关推荐
本文将深入探讨如何使用Java语言来实现一个自定义的License生成器,并结合图形化用户界面(GUI)来提升用户体验。以下是对该主题的详细阐述: 一、Java源码实现License生成器 1. 数据结构:首先,我们需要定义一个...
管理软件的license源码,可以根据安装的机器授权软件的使用的license,并提供在线激活功能。确保只能在授权的机器上使用,以及仅能使用授权的功能。确保一个license被多台机器使用,或者多个用户共用。本程序还可以...
1. JAVA 编写的 License生成器 2. 采用rsa非对称密钥算法。 3. 打包成jar直接运行。 4. 自动创建明文txt文件,修改后进行一键加密,生成License文件。 5. 优秀的界面操作。 6. 具有较好的不可复制性。
Java许可证(License)是软件开发中的一个重要组成部分,它定义了软件的使用、分发和修改规则。本程序通过Java语言实现,提供了许可证的生成和管理功能,对于理解软件授权机制和进行实际应用具有很高的价值。下面...
保证java web ,spirngboot,tomcate web安全,可以现在IP,mac,自定义参数,License生成器 (JAVA源码+界面) 其中包括license授权机制的原理和制作license的具体步骤 增加了mac 地址验证
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,处理pdf文件,亲测pdf转换图片无水印,无时间限制,压缩包包含aspose-pdf相关jar包和license.xml。警告:请勿用于商业用途,仅供学习研究,如有任何版权纠纷,本人概不负责!
JAVA中license控制实现示例 在 Java 中,license 控制是指通过生成和验证数字签名来控制软件的使用权限。这种方法广泛应用于 J2EE 应用中,特别是在系统购买的早期,提供有限制的 license 文件对系统进行限制。 在...
java license生成验证的实现
web系统Licence验证 保证java web ,可以现在IP,mac,自定义参数,License生成器 (JAVA源码+界面) 其中包括license授权机制的原理和制作license的具体步骤 增加了mac 地址验证
本篇将详细探讨`JAVA-license-control-demo.zip`提供的`License`生成和验证的Java实现示例,以及其中包含的文档`JAVA中license控制实现示例.doc`。 首先,我们要理解`License`生成的核心概念。在Java中,通常通过...
Java 中使用公钥加密私钥解密原理实现 License 控制 Java 中使用公钥加密私钥解密原理实现 License 控制是指在 Java 应用程序中使用公钥加密、私钥解密机制来实现 License 文件的控制。这种机制可以用来限制系统的...
在"jar java用aspose.word18.8带license"这个主题中,我们主要讨论的是如何在Java项目中使用Aspose.Word 18.8版本,并且该版本带有许可证,这确保了合法使用和商业部署。 Aspose.Word是一个完全独立的库,无需安装...
在Java开发中,为了保护软件不被非法使用,开发者通常会采用授权许可(License)机制。TrueLicense是一款强大的开源工具,专门用于构建Java应用程序的许可证管理解决方案。它提供了灵活的API,可以方便地集成到你的...
"Open License"是一种开源软件许可协议,它允许用户免费使用、修改、复制和分发软件。这个主题涉及到的是开源社区的核心原则,即源代码的开放性和共享性。在这个描述中,“open source license builder with GUI”...
Java Core Libraries开发者指南 Java Core Libraries是Java平台标准版的核心库,提供了大量的类和接口来实现各种...了解Java Core Libraries的使用和License是非常重要的,能够帮助开发者更好地使用Java平台标准版。
1. JAVA 编写的 License生成器 2. 采用rsa非对称密钥算法。 3. 打包成jar直接运行。 4. 自动创建明文txt文件,修改后进行一键加密,生成License文件。 5. 优秀的界面操作。 6. 具有较好的不可复制性。
标题中的"db2jcc_license_cu/db2java/db2jcc"揭示了这些文件与IBM的DB2数据库连接器有关,特别是Java版本的驱动程序。DB2是IBM提供的一款关系型数据库管理系统,广泛用于企业级的数据存储和管理。在Java环境中,为了...
在IT行业中,许可证(License)文件是软件发布者用来控制软件使用权限的重要工具。它定义了用户可以如何使用、分发以及修改软件的各种条件。在这个"license 生成license文件demo"中,我们主要关注的是如何生成这样的...
使用java版的aspose-slides,处理excel文件,亲测ppt,pptx转换图片无水印,无时间限制,压缩包包含aspose-slides相关jar包和破解文件license.xml。警告:请勿用于商业用途,仅供学习研究,如有任何版权纠纷,本人概...