1. 现在很多J2EE应用都采用一个license文件来授权系统的使用,特别是在系统购买的早期,会提供有限制的license文件对系统进行限制,比如试用版有譬如IP、日期、最大用户数量的限制等。
  2. 而license控制的方法又有很多,目前比较流行,只要设计的好就很难破解的方法就是采用一对密匙(私匙加密公匙解密)来生成License文件中的Sinature签名内容,再通过Base64或Hex来进行编码。比如原BEA公司现在是Oracle公司的WebLogic就采用的是这种方法来设置License文件。
  3. 这里只进行一个比较简单的实现:
  4. 一共三个类:
  5. A.KeyGenerater类生成公钥私钥对
  6. B.Signaturer类使用私钥进行签名
  7. C.SignProvider类用公钥验证
  8. 公钥和私钥使用Base64加密Base64这个类很多地方都可以查到。
  9. KeyGenerater类:
  10. public class KeyGenerater {
  11. private byte[] priKey;
  12. private byte[] pubKey;
  13. public void generater() {
  14. try {
  15. KeyPairGenerator keygen = KeyPairGenerator .getInstance("RSA");
  16. SecureRandom secrand = new SecureRandom();
  17. secrand.setSeed("www.川江号子.cn".getBytes()); // 初始化随机产生器
  18. keygen.initialize(1024, secrand);
  19. KeyPair keys = keygen.genKeyPair();
  20. PublicKey pubkey = keys.getPublic();
  21. PrivateKey prikey = keys.getPrivate()
  22. pubKey = Base64.encodeToByte(pubkey.getEncoded());
  23. priKey = Base64.encodeToByte(prikey.getEncoded());
  24. System.out.println("pubKey = " + new String(pubKey));
  25. System.out.println("priKey = " + new String(priKey));
  26. } catch (java.lang.Exception e) {
  27. System.out.println("生成密钥对失败");
  28. e.printStackTrace();
  29. }
  30. }
  31. public byte[] getPriKey() {
  32. return priKey;
  33. }
  34. public byte[] getPubKey() {
  35. return pubKey;
  36. }
  37. }
  38. Signaturer 类:
  39. public class Signaturer {
  40. public static byte[] sign(byte[] priKeyText, String plainText) {
  41. try {
  42. PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(priKeyText));
  43. KeyFactory keyf = KeyFactory.getInstance("RSA");
  44. PrivateKey prikey = keyf.generatePrivate(priPKCS8);
  45. // 用私钥对信息生成数字签名
  46. Signature signet = java.security.Signature.getInstance("MD5withRSA");
  47. signet.initSign(prikey);
  48. signet.update(plainText.getBytes());
  49. byte[] signed = Base64.encodeToByte(signet.sign());
  50. return signed;
  51. } catch (java.lang.Exception e) {
  52. System.out.println("签名失败");
  53. e.printStackTrace();
  54. }
  55. return null;
  56. }
  57. }
  58. SignProvider 类:
  59. public class SignProvider {
  60. private SignProvider() {
  61. }
  62. public static boolean verify(byte[] pubKeyText, String plainText,
  63. byte[] signText) {
  64. try {
  65. // 解密由base64编码的公钥,并构造X509EncodedKeySpec对象
  66. X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(Base64.decode(pubKeyText));
  67. // RSA对称加密算法
  68. KeyFactory keyFactory = KeyFactory.getInstance("RSA");
  69. // 取公钥匙对象
  70. PublicKey pubKey = keyFactory.generatePublic(bobPubKeySpec);
  71. // 解密由base64编码的数字签名
  72. byte[] signed = Base64.decode(signText);
  73. Signature signatureChecker = Signature.getInstance("MD5withRSA");
  74. signatureChecker.initVerify(pubKey);
  75. signatureChecker.update(plainText.getBytes());
  76. // 验证签名是否正常
  77. if (signatureChecker.verify(signed))
  78. return true;
  79. else
  80. return false;
  81. } catch (Throwable e) {
  82. System.out.println("校验签名失败");
  83. e.printStackTrace();
  84. return false;
  85. }
  86. }
  87. }

license文件生成原理的更多相关文章

  1. 用php生成一个excel文件(原理)

    1.我们用php来生成一个excel文档来讲述其原理: excel2007里面的文档目录组成部分为: 2.我们使用ZipArchive()方法来生成一个简易的excel文件. 使用方法: 3.代码如下 ...

  2. Java提高篇——JVM加载class文件的原理机制

    在面试java工程师的时候,这道题经常被问到,故需特别注意. 1.JVM 简介 JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从“Hello World ”开始的,然后 ...

  3. 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化

    第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件  ...

  4. phpcms模板生成原理

    phpcms模板生成原理2009-09-25 16:14PHPCMS是功能强大的网站管理系统.以后有时间,俺要将其管理.使用.再开发等等都理顺出来.这一篇短文先介绍PHPCMS的模板机制. 所谓网站模 ...

  5. 【Unity游戏开发】tolua之wrap文件的原理与使用

    本文内容转载自:https://www.cnblogs.com/blueberryzzz/p/9672342.html .非常感谢原作者慷慨地授权转载,比心!@blueberryzzz 是位大神,欢迎 ...

  6. tolua之wrap文件的原理与使用

    什么是wrap文件 每个wrap文件都是对一个c#类的包装,在lua中,通过对wrap类中的函数调用,间接的对c#实例进行操作. wrap类文件生成和使用的总体流程 生成一个wrap文件的流程 这部分 ...

  7. 【转载】tolua之wrap文件的原理与使用

    什么是wrap文件 每个wrap文件都是对一个c#类的包装,在lua中,通过对wrap类中的函数调用,间接的对c#实例进行操作. wrap类文件生成和使用的总体流程 生成一个wrap文件的流程 这部分 ...

  8. JVM加载class文件的原理机制(转)

    JVM加载class文件的原理机制 1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中 2.java中的 ...

  9. FastDFS分布式文件系统设计原理

    转载自http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker ser ...

随机推荐

  1. IO流文件字符输入输出流,缓冲流

    由于字节输入输出流在操纵Unicode字符时可能有乱码现象 于是就有了操作字符的输入输出流 Reader ,Writer和他们的子类FileReader,FileWrite(其实就是用来辅助构造的 W ...

  2. 在linux下用tomcat部署java web项目的过程与注意事项(转)

    一.安装JDK到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载Java SE 6 Update 27根据操作系 ...

  3. IIS 中asp.net的一些配置

    安装了IIS之后, 添加了虚拟目录然后运行页面, 出现了一点儿错误, 好像是不认识aspx文件, 把aspx文件当成是xml文件处理. 无法显示 XML 页. 使用 XSL 样式表无法查看 XML 输 ...

  4. 使用微软 AppFabric 遇到问题

    我做的一个项目用了,但是遇到很奇怪的问题,在测试环境下,两台机做集群,一切正常,达到设计要求,但是部署到专用网络(内部网络,无法访问internet),老是提示访问服务器超时,初步排查,发现貌似是域的 ...

  5. C 中typedef 函数指针的使用

    类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义.这儿的原本应该是变量的东西,就成为了类型. int integer;     //整型变量int *pointer ...

  6. HttpClient支持使用代理服务器以及身份认证

    HttpClient Authentication Doument: http://hc.apache.org/httpclient-3.x/authentication.html HttpClien ...

  7. 摇滚吧HTML5!有声前端交互!(Hello, Jsonic!)

    软件工程师们摆弄1和0编写他们的乌托邦,音乐人门把玩12平均律上的音符构筑他们的伊甸园.最近,我偶然看了<蓝色骨头>这部电影,片中的男主角是位黑客,同时又兼具音乐创作的才华.在现实生活中, ...

  8. Sicily 1021. Couples

    题目地址:1021. Couples 思路: 想清楚了这道题其实很简单.利用夫妻出现的位置作为下标,并设为同一值,第一对夫妻值为1,第二对为2,以此类推,存储完毕即可进入下一步. 利用栈这个数据结构: ...

  9. ASP.NET 表单认证与角色授权

    参考 : http://hi.baidu.com/iykqqlpugocfnqe/item/e132329bdea22acbb6253105  ASP.NET中处理请求的流程图 http://www. ...

  10. Codeforces 23E Tree

    http://codeforces.com/problemset/problem/23/E 题意:给一个树,求砍断某些边,使得所有联通块大小的乘积最大.思路:f[i][j]代表当前把j个贡献给i的父亲 ...