项目实训1

6月28日正式进入项目实训,上午我们数据库安全系统小组的成员完成了与公司负责人的对接,进行了组内分组,知悉了自己每个人负责的模块内容。组内工作分为三组,分别为:

  1. web端模块,主要实现密钥以及密钥策略的管理,并实现可以与数据库插件对接的接口。
  2. 数据库插件模块,接受web端发送的密钥以及关联的策略,进行加密;接受请求后对数据库内密文进行解密并发送给web端。
  3. 算法模块,使用国内开源的密码组件bouncy castle利用国产SM4算法得到加密和解密的方法,实现加密解密和与数据库插件模块对接。

下午负责人又详细给我们安排了填写“产品需求规格说明书”以及“概要设计说明书”的工作,使我们对此次项目的要求有了更深层次的理解,规避了风险。

6月28日下午和29日我主要学习了SM4算法:

1.实现了接收密钥明文return一个对象的代码,通过这个对象的getEnOut()方法获得密文。String enOut = testInput.TestInfo1().getEnOut();
2.实现了接收密钥密文return一个对象的代码,通过这个对象的getDeOut()方法获得明文。String deOut = testOutput.TestInfo2().getDeOut();

遇到的问题:
实现加密操作时,需要处理16进制的byte字节使其转换为string字符串,需要通过for循环对字节数组挨个进行处理,if语句判断是否为0 :if ((byteArray[i] & 0xff) < 0x10)。
实现解密操作时,需要处理string字符串使其转换为16进制byte字节,通过以下两个方法实现。

  private static byte[] hexStringToBytes(String hexString) {
    if (hexString == null || hexString.length() <= 0) {
        return null;
    }
    hexString = hexString.toUpperCase();
    int length = hexString.length() / 2;
    char[] hexChars = hexString.toCharArray();
    byte[] d = new byte[length];
    for (int i = 0; i < length; i++) {
        int pos = i * 2;
        d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
    }
    return d;
}

private static byte charToByte(char c) {
    return (byte) "0123456789ABCDEF".indexOf(c);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值