背景
OA办公自动化系统软件、开源软件、商业化软件、共享软件、免费软件的开发者对自己的产品享有知识产权,于是有GPL协议、GNU等著名的开源保协议,以及各种商业的授权协议,这些都是法律层面上保护,属事后追责。那么如何在事前预防呢?由于软件本身的特点当前流行的一种是离线注册码验证,一种是在线注册验证。
什么是注册码
当客户购买OA办公自动化系统产品做私有化部署时,在安装过程中会提示输入一组代码或授权文件以验证合法性,验证通过则表示合法,可以安装成功,能够正常使用,不通过则会安装失败而无法使用。验证通常会考虑只允许客户指定服务器上部署及对客户可用的功能权限、用户数等进行控制。
RSA算法
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 RSA也是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
RSA加密算法是一种非对称加密算法,在甲乙方的通信过程中,首先甲方(通常是服务端)会生成一对秘钥对,称作公钥(Public Key)和私钥(Private Key),然后他把生成的公钥或私钥发送给乙方(客户端),乙方获取到公钥或私钥之后,用它将原始数据加密后发送给甲方,此时甲方用私钥或公钥对乙方发送过来的加密数据进行解密,在整个通信过程中,即使请求被拦截,攻击者获取到了暴露的秘钥和加密数据也无法解密,因为只能使用甲方手中的私钥才能解密,而在整个通信过程中私钥始终保存在甲方手中,没有在通信过程中传递,所以攻击者也就很难获取到,除非是甲方有意暴露。
RSA算法流程
1、先随机生成一对公钥E和私钥D;
2、OA系统开发者写一个注册机,注册机完成的工作就是把用户名信息M用私钥D加密,密文C就是注册码。由于密文往往包含不可显示字符,所以最好把密文进行编码,变成可显示字符,比如采用base64、uuencode编码等。
密文C = (M ^ D) mod N
其中^表示乘幂,mod表示求余,N为RSA的模数。
3、OA系统将用户输入的注册码先进行解码(如base64解码等),得到密文,然后用公钥E对密文进行解密,得到明文M',如果明文和用户名相同(即满足M' = M),则说明注册码正确,否则就是非法的注册码。破解者可以通过跟踪你的软件得到公钥E,但无法得到私钥D。
明文M' = (C ^ E) mod D
Java实现RSA算法应用
其实JDK中已经实现了多种加密算法,OA系统开发注册码验证时并不需重写RSA加密算法,直接拿来用即可,拿来主义加快开发速度.
生成公钥和私钥
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kp = kpg.genKeyPair();
PublicKey pbkey = kp.getPublic();
PrivateKey prkey = kp.getPrivate();
用BASE64编码后作为可见字符串保存。
//公钥加密
public static String encryptPublicKey(String data, RSAPublicKey publicKey)
throws Exception {
...
return enCode;
}
//使用私钥进行解密
public static String decryptPrivateKey(String data, RSAPrivateKey privateKey)
throws Exception {
....
retunr decode;
}
然后在加密解密的地方调用
保护有用吗?
OA办公自动化系统产品加入这个注册码验证就能保护自己的知识产权了吗?理想很丰满,现实很骨感,这个只是相当于门上装了把锁,比大门敞开好一点,只能防君子,不能防小人。
海钛瑞OA办公自动化系统本身就是免费OA系统不需要复杂注册码。提供免费永久授权。