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

操作前提:
获得数据库密文,对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]=97
      * strs[1]=110
      * strs[2]=94
      */

    byte[] bytes = new byte[strs.length];
    for (int i = 0; i < strs.length; i++)
    {
        try {
            int b = Integer.parseInt(strs[i]) + i * 16 % 256;       //这里是算法的核心代码,数组的下标值(i)乘上16取余256再加上第i个数组的值。第一次循环就是0*16%256+97把结果赋给变量b,此时b=97,第二次b=126,第三次b=126
            if (b > 255) {                                          //整个判断的是如果b>255则把b-256在赋值给b,表达式表示为b=b-256
            b -= 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值