H3C IMC MSSQL数据库的密文的解密过程

来源:互联网 发布:psv如何重构数据库 编辑:程序博客网 时间:2024/05/22 12:51

操作前提:
获得数据库密文,对IMC的程序目录有直接可读权限;
如果你有其它方式获得密文也可以。

我这里以先有服务器权限举例。在IMC的安装目录下找到文件名为“dma.conf”内容如下图
这里写图片描述

密文格式:

-xx-xx-xx-xx-xx-xx-xx-xx (xx为整数)

没见过的密文格式,百度无果。

打包下载了所有的*.jar文件到本地,反编译查看加密/解密算法

这里写图片描述

以下是解密算法,以密文 -97-110-94 为例,

private static String decrypt(String et){if (!et.startsWith(“-“)) {    //判断密文是否以“-”开头log.error(“Invalid encrypted text: ” + et);return null;}String[] strs = et.substring(1).split(“-“);          /*这里把密文以“-”为分隔符分割存放到数组strs[]里,就是只取出每一个“-”之间的整数,即strs[0]=97strs[1]=110strs[2]=94*/byte[] bytes = new byte[strs.length];for (int i = 0; i < strs.length; i++) {   //循环从0开始,注意数组下标为0是第一个数组成员,以此类推try {int b = Integer.parseInt(strs[i]) + i * 16 % 256;     //这里是算法的核心代码,数组的下标值(i)乘上16取余256再加上第i个数组的值。第一次循环就是0*16%256+97把结果赋给变量b,此时b=97,第二次b=126,第三次b=126if (b > 255) {   //整个判断的是如果b>255则把b-256在赋值给b,表达式表示为b=b-256b -= 256;}bytes[i] = ((byte)b);    //把整形变量b转换成字节然后存放在上面创建的字节数组bytes[]里} catch (NumberFormatException nfe) {return null;}}String str = new String(bytes);    //这里把之前算出来的b,就是存放入bytes[]数组里的数据转换成字符,不知道怎么转换的,参考十进制的ASCII码表,转换之后把结果存放到变量str。举例的结果解密结果为“a~~”if (!str.endsWith(“~~”)) {   //最后检查是否以字符“~~”结尾log.error(“Invalid encrypted text: ” + et);return null;}return str.substring(0, str.length() – 2);    //把解密后的结果最后两位去掉,去掉“~~”之后的结果就是明文。举例的结果解密结果为“a”}
0 0
原创粉丝点击