笔记-记一次查看SM4密码解密包源码

简单介绍

包文件结构,此包是一个对数据源密码进行加密的包。
在这里插入图片描述

从工具类开始看
在这里插入图片描述

从工具类向后看

在这里插入图片描述
获取名为database-keyencryption-phcdb-i.properties的properties文件里的database-value-i值和database-iv-i值。
同理获取database-keyencryption-phcdb-s.properties里的database-value-s和database-iv-s
同理获取databses-keyencryption-phcdb-o.properties里的database-value-o和database-iv-o

在这里插入图片描述
三个value拼成一个value,三个iv拼成一个iv。
在这里插入图片描述
根据拼出的iv,value和传入的密文p1,通过new SM4Util().decryptBySM4CBC()方法进行运算得出明文p2。并且p2是直接return返回了。
我们进SM4Util这个类里看decryptBySM4CBC这个方法。
在这里插入图片描述
传参转成16进制再调方法。结果转成utf8格式。恩,string的通常的处理方式。
再深入进去。decryptData_CBC方法
在这里插入图片描述
恩,一些校验和实例的创建。再深入sm4_crypt_cbc方法
在这里插入图片描述
这是一些具体的运算方法了。回到SM4DecryptUtil类。那么这个类的decrypt的解密方法已经看完了。

从工具类向前看

在这里插入图片描述
getProperties
在这里插入图片描述

ResourceBundle类:可以读取配置文件。
使用ResourceBundle访问本地资源。可以访问一个/WEB-INF/classes目录下的一个后缀名为properties的文本类型文件,从里面读取我们需要的值。
就如同上面的,从database-keyencryption-phcdb-i.properties文件中获取键为database-value-i的值。

继续深入,点到getBundle方法里面。
在这里插入图片描述
我又发现一个注解。@CallerSensitive
作用:针对于方法调用者做一些控制。
1.要求调用者必须有@CallerSensitive注解,并且必须有权限(由bootstrap class loader或者extension class loader加载的类)才可以调用。
关于这贴一份官方解释:

这个注解是为了堵住漏洞用的。曾经有黑客通过构造双重反射来提升权限,
原理是当时反射只检查固定深度的调用者的类,看它有没有特权,
例如固定看两层的调用者(getCallerClass(2))。如果我的类本来没足够
权限群访问某些信息,那我就可以通过双重反射去达到目的:反射相关
的类是有很高权限的,而在 我->反射1->反射2 这样的调用链上,反射2
检查权限时看到的是反射1的类,这就被欺骗了,导致安全漏洞。
使用CallerSensitive后,getCallerClass不再用固定深度去寻找
actual caller(“我”),而是把所有跟反射相关的接口方法都标注上
CallerSensitive,搜索时凡看到该注解都直接跳过,这样就有效解决了
前面举例的问题

2.Reflection.getCallerClass()加了@CallerSensitive注解后,能够跟踪到最初的调用者。
类似抛异常的时候exception.getStackTrace()获取栈追踪信息。
3.@CallerSensitive能够堵住反射的漏洞,当你尝试用反射调用Reflection.getCallerClass(),结果会抛出异常。
意思就是不能反射调用。
再深入就是java.util包的源码了,就到此为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静安书以沫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值