Jelajahi Sumber

国产化校验去除

fuyuchuan 4 bulan lalu
induk
melakukan
721ad42df6
13 mengubah file dengan 921 tambahan dan 920 penghapusan
  1. 6 6
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/api/SysLogControllerApi.java
  2. 37 37
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysLogininforController.java
  3. 4 4
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysOperlogController.java
  4. 13 13
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysUserController.java
  5. 1 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysLogininforService.java
  6. 2 2
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysUserService.java
  7. 4 4
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysLoginService.java
  8. 7 7
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysLogininforServiceImpl.java
  9. 17 17
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysOperLogServiceImpl.java
  10. 4 4
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysRoleServiceImpl.java
  11. 35 34
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserServiceImpl.java
  12. 230 230
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/App.java
  13. 561 561
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/Operation.java

+ 6 - 6
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/api/SysLogControllerApi.java

@@ -8,7 +8,7 @@ import com.usky.system.domain.*;
 import com.usky.system.mapper.SysCheckCodeMapper;
 import com.usky.system.service.ISysLogininforService;
 import com.usky.system.service.ISysOperLogService;
-import com.usky.system.service.util.Operation;
+// import com.usky.system.service.util.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -32,11 +32,11 @@ public class SysLogControllerApi implements RemoteLogService {
     @Autowired
     private SysCheckCodeMapper sysCheckCodeMapper;
 
-    Operation operation = new Operation();
+    // Operation operation = new Operation();
 
     @Override
     public ApiResult<Boolean> saveLog(SysOperLogVO sysOperLog) {
-        SysCheckCode sysCheckCode = new SysCheckCode();
+        /*SysCheckCode sysCheckCode = new SysCheckCode();
         //校验码存储
         sysCheckCode.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId());
         sysCheckCode.setUserId(SecurityUtils.getUserId());
@@ -50,13 +50,13 @@ public class SysLogControllerApi implements RemoteLogService {
         } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
         }
-        sysCheckCodeMapper.insert(sysCheckCode);
+        sysCheckCodeMapper.insert(sysCheckCode);*/
         return ApiResult.success(sysOperLogService.save(BeanMapperUtils.map(sysOperLog, SysOperLog.class)));
     }
 
     @Override
     public ApiResult<Boolean> saveLogininfor(SysLogininforVO sysLogininfor) {
-        SysCheckCode sysCheckCode = new SysCheckCode();
+        /*SysCheckCode sysCheckCode = new SysCheckCode();
         //校验码存储
         sysCheckCode.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId());
         sysCheckCode.setUserId(SecurityUtils.getUserId());
@@ -70,7 +70,7 @@ public class SysLogControllerApi implements RemoteLogService {
         } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
         }
-        sysCheckCodeMapper.insert(sysCheckCode);
+        sysCheckCodeMapper.insert(sysCheckCode);*/
         return ApiResult.success(sysLogininforService.save(BeanMapperUtils.map(sysLogininfor, SysLogininfor.class)));
     }
 }

+ 37 - 37
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysLogininforController.java

@@ -10,7 +10,7 @@ import com.usky.system.domain.SysCheckCode;
 import com.usky.system.domain.SysLogininfor;
 import com.usky.system.mapper.SysCheckCodeMapper;
 import com.usky.system.service.ISysLogininforService;
-import com.usky.system.service.util.Operation;
+// import com.usky.system.service.util.Operation;
 import com.usky.system.service.vo.SysLoginExportVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -37,42 +37,42 @@ public class SysLogininforController extends BaseController {
     public ApiResult<TableDataInfo> list(SysLogininfor logininfor) {
         startPage();
         List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
-        logininforService.logCheck(list);
-//        if (list.size() != 0) {
-//            for (int i = 0; i < list.size(); i++) {
-//                LambdaQueryWrapper<SysCheckCode> query = new LambdaQueryWrapper<>();
-//                query.select(SysCheckCode::getCheckCode)
-//                        .eq(SysCheckCode::getPlaintext, list.get(i).getInfoId())
-//                        .eq(SysCheckCode::getCheckCodeType, 3);
-//                SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(query);
-//                if (sysCheckCode == null) {
-//                    throw new BusinessException("日志数据异常!");//登录日志记录有数据,而校验码表中没有数据
-//                }
-//                String checkCode1 = sysCheckCode.getCheckCode();
-//                //分两种情况判断:dept_id参与校验码计算与否
-//                try {
-//                    if (!Objects.nonNull(list.get(i).getDeptId())) {
-//                        String checkCode = operation.CBCMAC((list.get(i).getUserName() + list.get(i).getIpaddr() + list.get(i).getStatus() +
-//                                list.get(i).getMsg() + list.get(i).getAccessTime().toString() + list.get(i).getTenantId().toString()).getBytes("UTF-8"));
-//                        System.out.println("计算校验: "+checkCode);
-//                        System.out.println("表中数据: "+checkCode1);
-//                        if (!checkCode.equals(checkCode1)) {
-//                            throw new BusinessException("【完整性】校验失败,日志数据是被破坏或者篡改的");
-//                        }
-//                    }else {
-//                        String checkCode = operation.CBCMAC((list.get(i).getUserName() + list.get(i).getIpaddr() + list.get(i).getStatus() +
-//                                list.get(i).getMsg() + list.get(i).getAccessTime().toString() + list.get(i).getDeptId().toString() + list.get(i).getTenantId().toString()).getBytes("UTF-8"));
-//                        System.out.println("计算校验: "+checkCode);
-//                        System.out.println("表中数据: "+checkCode1);
-//                        if (!checkCode.equals(checkCode1)) {
-//                            throw new BusinessException("【完整性】校验失败,日志数据是被破坏或者篡改的");
-//                        }
-//                    }
-//                } catch (UnsupportedEncodingException e) {
-//                    e.printStackTrace();
-//                }
-//            }
-//        }
+        /*logininforService.logCheck(list);
+       if (list.size() != 0) {
+           for (int i = 0; i < list.size(); i++) {
+               LambdaQueryWrapper<SysCheckCode> query = new LambdaQueryWrapper<>();
+               query.select(SysCheckCode::getCheckCode)
+                       .eq(SysCheckCode::getPlaintext, list.get(i).getInfoId())
+                       .eq(SysCheckCode::getCheckCodeType, 3);
+               SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(query);
+               if (sysCheckCode == null) {
+                   throw new BusinessException("日志数据异常!");//登录日志记录有数据,而校验码表中没有数据
+               }
+               String checkCode1 = sysCheckCode.getCheckCode();
+               //分两种情况判断:dept_id参与校验码计算与否
+               try {
+                   if (!Objects.nonNull(list.get(i).getDeptId())) {
+                       String checkCode = operation.CBCMAC((list.get(i).getUserName() + list.get(i).getIpaddr() + list.get(i).getStatus() +
+                               list.get(i).getMsg() + list.get(i).getAccessTime().toString() + list.get(i).getTenantId().toString()).getBytes("UTF-8"));
+                       System.out.println("计算校验: "+checkCode);
+                       System.out.println("表中数据: "+checkCode1);
+                       if (!checkCode.equals(checkCode1)) {
+                           throw new BusinessException("【完整性】校验失败,日志数据是被破坏或者篡改的");
+                       }
+                   }else {
+                       String checkCode = operation.CBCMAC((list.get(i).getUserName() + list.get(i).getIpaddr() + list.get(i).getStatus() +
+                               list.get(i).getMsg() + list.get(i).getAccessTime().toString() + list.get(i).getDeptId().toString() + list.get(i).getTenantId().toString()).getBytes("UTF-8"));
+                       System.out.println("计算校验: "+checkCode);
+                       System.out.println("表中数据: "+checkCode1);
+                       if (!checkCode.equals(checkCode1)) {
+                           throw new BusinessException("【完整性】校验失败,日志数据是被破坏或者篡改的");
+                       }
+                   }
+               } catch (UnsupportedEncodingException e) {
+                   e.printStackTrace();
+               }
+           }
+       }*/
         return ApiResult.success(getDataTable(list));
     }
 

+ 4 - 4
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysOperlogController.java

@@ -13,7 +13,7 @@ import com.usky.system.domain.SysCheckCode;
 import com.usky.system.domain.SysOperLog;
 import com.usky.system.mapper.SysCheckCodeMapper;
 import com.usky.system.service.ISysOperLogService;
-import com.usky.system.service.util.Operation;
+// import com.usky.system.service.util.Operation;
 import com.usky.system.service.vo.SysOperLogExportVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -37,13 +37,13 @@ public class SysOperlogController extends BaseController {
     @Autowired
     private SysCheckCodeMapper sysCheckCodeMapper;
 
-    Operation operation = new Operation();
+    // Operation operation = new Operation();
 
     @GetMapping("/list")
     public ApiResult<TableDataInfo> list(SysOperLog operLog) {
         startPage();
         List<SysOperLog> list = operLogService.selectOperLogList(operLog);
-        for (int i = 0; i < list.size(); i++) {
+/*        for (int i = 0; i < list.size(); i++) {
             LambdaQueryWrapper<SysCheckCode> query = new LambdaQueryWrapper<>();
             query.select(SysCheckCode::getCheckCode)
                     .eq(SysCheckCode::getPlaintext,list.get(i).getOperId())
@@ -62,7 +62,7 @@ public class SysOperlogController extends BaseController {
             } catch (UnsupportedEncodingException e) {
                 e.printStackTrace();
             }
-        }
+        }*/
         return ApiResult.success(getDataTable(list));
     }
 

+ 13 - 13
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysUserController.java

@@ -12,7 +12,7 @@ import com.usky.system.domain.SysUser;
 import com.usky.system.domain.constants.UserConstants;
 import com.usky.system.mapper.SysCheckCodeMapper;
 import com.usky.system.service.*;
-import com.usky.system.service.util.Operation;
+// import com.usky.system.service.util.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -42,7 +42,7 @@ public class SysUserController extends BaseController {
     @Autowired
     private SysCheckCodeMapper sysCheckCodeMapper;
 
-    Operation operation = new Operation();
+    // Operation operation = new Operation();
 
     /**
      * 获取用户列表
@@ -79,7 +79,7 @@ public class SysUserController extends BaseController {
     @Transactional
     @PostMapping
     public ApiResult<Void> add(@Validated @RequestBody SysUser user) {
-       SysCheckCode sysCheckCode = new SysCheckCode();
+       // SysCheckCode sysCheckCode = new SysCheckCode();
         if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName(), SecurityUtils.getTenantId()))) {
             return ApiResult.error(BusinessErrorCode.BIZ_BUSINESS_ERROR.getCode(), "新增用户'" + user.getUserName() + "'失败,登录账号已存在");
         }
@@ -88,16 +88,16 @@ public class SysUserController extends BaseController {
        user.setCreateBy(SecurityUtils.getUsername());
        user.setDelFlag("0");
 
-       sysCheckCode.setPlaintext(user.getPassword());
+       /*sysCheckCode.setPlaintext(user.getPassword());
        try {
            sysCheckCode.setCheckCode(operation.CBCMAC(user.getPassword().getBytes("UTF-8")));//存密码校验码
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
-       }
+       }*/
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));//让校验码工具先获取原始明文密码的校验码在进行加密存储到sys_user表中
         int row = userService.insertUser(user);//将数据插入user表中后才生成user_id与表sys_check_code表关联
 
-       sysCheckCode.setUserId(user.getUserId());
+       /*sysCheckCode.setUserId(user.getUserId());
        sysCheckCode.setUserName(user.getUserName());
        sysCheckCode.setDeptId(user.getDeptId());
        sysCheckCode.setTenantId(user.getTenantId());
@@ -116,7 +116,7 @@ public class SysUserController extends BaseController {
            e.printStackTrace();
        }
        sysCheckCode.setCheckCodeType(2);
-       sysCheckCodeMapper.insert(sysCheckCode);
+       sysCheckCodeMapper.insert(sysCheckCode);*/
         return toAjax(row);
     }
 
@@ -147,9 +147,9 @@ public class SysUserController extends BaseController {
     public ApiResult<Void> edit(@Validated @RequestBody SysUser user) {
         userService.checkUserAllowed(user);
         user.setUpdateBy(SecurityUtils.getUsername());
-        userService.updateCheckPhoneNumber(user);
+        // userService.updateCheckPhoneNumber(user);
         //更新手机号校验数据
-       LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
+       /*LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(SysCheckCode::getId)
                .eq(SysCheckCode::getUserId, user.getUserId())
                .eq(SysCheckCode::getCheckCodeType, 2);
@@ -179,7 +179,7 @@ public class SysUserController extends BaseController {
                e.printStackTrace();
            }
        }
-       sysCheckCodeMapper.updateById(sysCheckCode);
+       sysCheckCodeMapper.updateById(sysCheckCode);*/
         return toAjax(userService.updateUser(user));
     }
 
@@ -212,9 +212,9 @@ public class SysUserController extends BaseController {
     @PutMapping("/resetPwd")
     public ApiResult<Void> resetPwd(@RequestBody SysUser user) {
         userService.checkUserAllowed(user);
-        userService.updateCheckPassword(user);
+        // userService.updateCheckPassword(user);
 //        //更新密码数据
-       LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
+       /*LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysCheckCode::getUserId, user.getUserId())
                .eq(SysCheckCode::getCheckCodeType, 1);
        SysCheckCode sysCheckCode = sysCheckCodeMapper.selectOne(wrapper);
@@ -226,7 +226,7 @@ public class SysUserController extends BaseController {
            }
        }
        sysCheckCode.setPlaintext(user.getPassword());
-       sysCheckCodeMapper.updateById(sysCheckCode);
+       sysCheckCodeMapper.updateById(sysCheckCode);*/
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
         user.setUpdateBy(SecurityUtils.getUsername());
         return toAjax(userService.resetPwd(user));

+ 1 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysLogininforService.java

@@ -54,5 +54,5 @@ public interface ISysLogininforService extends CrudService<SysLogininfor>
      *  日志校验
      * @param list 登录日志集合
      */
-    void logCheck(List<SysLogininfor> list);
+    // void logCheck(List<SysLogininfor> list);
 }

+ 2 - 2
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysUserService.java

@@ -238,12 +238,12 @@ public interface ISysUserService extends CrudService<SysUser> {
      * 更新手机号校验码
      * @param user 用户信息
      */
-    void updateCheckPhoneNumber(SysUser user);
+    // void updateCheckPhoneNumber(SysUser user);
 
     /**
      * 更新密码校验码
      * @param user 用户信息
      */
-    void updateCheckPassword(SysUser user);
+    // void updateCheckPassword(SysUser user);
 
 }

+ 4 - 4
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysLoginService.java

@@ -14,7 +14,7 @@ import com.usky.system.domain.constants.UserConstants;
 import com.usky.system.mapper.SysCheckCodeMapper;
 import com.usky.system.model.LoginUser;
 import com.usky.system.service.enums.UserStatus;
-import com.usky.system.service.util.Operation;
+// import com.usky.system.service.util.Operation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -58,7 +58,7 @@ public class SysLoginService {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(SysLoginService.class);
 
-    Operation operation = new Operation();
+    // Operation operation = new Operation();
 
     /**
      * 登录
@@ -155,7 +155,7 @@ public class SysLoginService {
                 throw new BusinessException("用户不存在");
             }
 
-            String str1 = password;
+            /*String str1 = password;
             //访问控制信息校验码计算
             String mac1 = null;
             try {
@@ -194,7 +194,7 @@ public class SysLoginService {
                 }
             } catch (UnsupportedEncodingException e) {
                 e.printStackTrace();
-            }
+            }*/
 
             if (!SecurityUtils.matchesPassword(password, loginUser.getPassword())) {
                 recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, "用户密码错误");

+ 7 - 7
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysLogininforServiceImpl.java

@@ -12,7 +12,7 @@ import com.usky.system.mapper.SysCheckCodeMapper;
 import com.usky.system.mapper.SysLogininforMapper;
 import com.usky.system.mapper.SysUserMapper;
 import com.usky.system.service.ISysLogininforService;
-import com.usky.system.service.util.Operation;
+// import com.usky.system.service.util.Operation;
 import com.usky.system.service.vo.SysLoginExportVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -39,7 +39,7 @@ public class SysLogininforServiceImpl extends AbstractCrudService<SysLogininforM
     @Autowired
     private SysUserMapper sysUserMapper;
 
-    Operation operation = new Operation();
+    // Operation operation = new Operation();
 
     /**
      * 新增系统登录日志
@@ -52,7 +52,7 @@ public class SysLogininforServiceImpl extends AbstractCrudService<SysLogininforM
         wrapper.select(SysUser::getUserId, SysUser::getTenantId, SysUser::getDeptId)
                 .eq(SysUser::getUserName, logininfor.getUserName());
         SysUser sysUser = sysUserMapper.selectOne(wrapper);
-        SysCheckCode sysCheckCode = new SysCheckCode();
+        // SysCheckCode sysCheckCode = new SysCheckCode();
         Date now = new Date();
         logininfor.setAccessTime(now);
         logininfor.setTenantId(sysUser.getTenantId());
@@ -67,7 +67,7 @@ public class SysLogininforServiceImpl extends AbstractCrudService<SysLogininforM
         }
         logininforMapper.insertLogininfor(logininfor);
 
-        sysCheckCode.setPlaintext(logininfor.getInfoId().toString());
+/*        sysCheckCode.setPlaintext(logininfor.getInfoId().toString());
         sysCheckCode.setUserName(logininfor.getUserName());
         sysCheckCode.setTenantId(logininfor.getTenantId());
         sysCheckCode.setUserId(sysUser.getUserId());
@@ -89,7 +89,7 @@ public class SysLogininforServiceImpl extends AbstractCrudService<SysLogininforM
         } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
         }
-        sysCheckCodeMapper.insert(sysCheckCode);
+        sysCheckCodeMapper.insert(sysCheckCode);*/
     }
 
     /**
@@ -108,7 +108,7 @@ public class SysLogininforServiceImpl extends AbstractCrudService<SysLogininforM
     /**
      * @param list 登录记录集合
      */
-    @Override
+    /*@Override
     public void logCheck(List<SysLogininfor> list) {
         if (list.size() != 0) {
             for (int i = 0; i < list.size(); i++) {
@@ -145,7 +145,7 @@ public class SysLogininforServiceImpl extends AbstractCrudService<SysLogininforM
                 }
             }
         }
-    }
+    }*/
 
     /**
      * 查询系统登录日志集合-导出

+ 17 - 17
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysOperLogServiceImpl.java

@@ -9,7 +9,7 @@ import com.usky.system.domain.SysOperLog;
 import com.usky.system.mapper.SysCheckCodeMapper;
 import com.usky.system.mapper.SysOperLogMapper;
 import com.usky.system.service.ISysOperLogService;
-import com.usky.system.service.util.Operation;
+// import com.usky.system.service.util.Operation;
 import com.usky.system.service.vo.SysOperLogExportVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -34,7 +34,7 @@ public class SysOperLogServiceImpl extends AbstractCrudService<SysOperLogMapper,
     @Autowired
     private SysCheckCodeMapper sysCheckCodeMapper;
 
-    Operation operation = new Operation();
+    // Operation operation = new Operation();
     /**
      * 新增操作日志
      * 
@@ -43,7 +43,7 @@ public class SysOperLogServiceImpl extends AbstractCrudService<SysOperLogMapper,
     @Override
     public void insertOperlog(SysOperLog operLog)
     {
-        SysCheckCode sysCheckCode = new SysCheckCode();
+        // SysCheckCode sysCheckCode = new SysCheckCode();
         operLog.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId().intValue());
         operLog.setCreateBy(operLog.getOperName());
 
@@ -51,20 +51,20 @@ public class SysOperLogServiceImpl extends AbstractCrudService<SysOperLogMapper,
         Date now = new Date();
         operLog.setOperTime(now);
         operLogMapper.insertOperlog(operLog);
-        sysCheckCode.setPlaintext(operLog.getOperId().toString());
-        Long deptId = operLog.getDeptId() != null ? operLog.getDeptId().longValue() : null;
-        sysCheckCode.setDeptId(deptId);
-        sysCheckCode.setUserId(SecurityUtils.getUserId());
-        sysCheckCode.setTenantId(SecurityUtils.getTenantId());
-        sysCheckCode.setUserName(operLog.getOperName());
-        sysCheckCode.setCheckCodeType(4);
-        try {
-            sysCheckCode.setCheckCode(operation.CBCMAC((operLog.getTitle()+operLog.getBusinessType().toString()+ operLog.getMethod() +operLog.getOperName()
-                    +operLog.getOperUrl()+operLog.getOperIp()+operLog.getOperTime().toString()+operLog.getTenantId().toString()).getBytes("UTF-8")));
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-        sysCheckCodeMapper.insert(sysCheckCode);
+        // sysCheckCode.setPlaintext(operLog.getOperId().toString());
+        // Long deptId = operLog.getDeptId() != null ? operLog.getDeptId().longValue() : null;
+        // sysCheckCode.setDeptId(deptId);
+        // sysCheckCode.setUserId(SecurityUtils.getUserId());
+        // sysCheckCode.setTenantId(SecurityUtils.getTenantId());
+        // sysCheckCode.setUserName(operLog.getOperName());
+        // sysCheckCode.setCheckCodeType(4);
+        // try {
+        //     sysCheckCode.setCheckCode(operation.CBCMAC((operLog.getTitle()+operLog.getBusinessType().toString()+ operLog.getMethod() +operLog.getOperName()
+        //             +operLog.getOperUrl()+operLog.getOperIp()+operLog.getOperTime().toString()+operLog.getTenantId().toString()).getBytes("UTF-8")));
+        // } catch (UnsupportedEncodingException e) {
+        //     e.printStackTrace();
+        // }
+        // sysCheckCodeMapper.insert(sysCheckCode);
     }
 
     /**

+ 4 - 4
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysRoleServiceImpl.java

@@ -12,7 +12,7 @@ import com.usky.system.domain.constants.UserConstants;
 import com.usky.system.mapper.*;
 import com.usky.system.service.ISysRoleService;
 import com.usky.system.service.SysTenantMenuService;
-import com.usky.system.service.util.Operation;
+// import com.usky.system.service.util.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -49,7 +49,7 @@ public class SysRoleServiceImpl extends AbstractCrudService<SysRoleMapper, SysRo
     @Autowired
     private SysCheckCodeMapper checkCodeMapper;
 
-    Operation operation = new Operation();
+    // Operation operation = new Operation();
     /**
      * 根据条件分页查询角色数据
      *
@@ -231,7 +231,7 @@ public class SysRoleServiceImpl extends AbstractCrudService<SysRoleMapper, SysRo
     @Transactional
     public int updateRole(SysRole role)
     {
-        SysCheckCode sysCheckCode = new SysCheckCode();
+        /*SysCheckCode sysCheckCode = new SysCheckCode();
         try {
             String SignatureValue = operation.HMAC(role.toString().getBytes("UTF-8"));
             String SignatureValue1 = operation.HMAC(role.toString().getBytes("UTF-8"));
@@ -250,7 +250,7 @@ public class SysRoleServiceImpl extends AbstractCrudService<SysRoleMapper, SysRo
         } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
         }
-        checkCodeMapper.insert(sysCheckCode);
+        checkCodeMapper.insert(sysCheckCode);*/
         // 修改角色信息
         roleMapper.updateRole(role);
         // 删除角色与菜单关联

+ 35 - 34
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserServiceImpl.java

@@ -18,7 +18,7 @@ import com.usky.system.mapper.*;
 import com.usky.system.model.LoginUser;
 import com.usky.system.service.ISysConfigService;
 import com.usky.system.service.ISysUserService;
-import com.usky.system.service.util.Operation;
+// import com.usky.system.service.util.Operation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -69,7 +69,7 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
 
 
 
-    Operation operation = new Operation();
+    // Operation operation = new Operation();
 
     /**
      * 根据条件分页查询用户列表
@@ -256,7 +256,7 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
      * 更新手机号校验数据(国产化)
      * @param user 用户信息
      */
-    @Override
+/*    @Override
     public void updateCheckPhoneNumber(SysUser user){
         LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
         wrapper.select(SysCheckCode::getId)
@@ -268,7 +268,8 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
             try {
                 sysCheckCode.setCiphertext(operation.SM4CBCEnc(user.getPhonenumber().getBytes("UTF-8")));
                 sysCheckCode.setCheckCode(operation.CBCMAC(user.getPhonenumber().getBytes("UTF-8")));
-                String SignatureValue = operation.HMAC(user.toString().getBytes("UTF-8"));//存入第一次计算的签名值
+                //存入第一次计算的签名值
+                String SignatureValue = operation.HMAC(user.toString().getBytes("UTF-8"));
                 SysCheckCode sysCheckCode1 = new SysCheckCode();
                 sysCheckCode1.setUserId(user.getUserId());
                 sysCheckCode1.setDeptId(user.getDeptId());
@@ -289,14 +290,14 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
             }
         }
         sysCheckCodeMapper.updateById(sysCheckCode);
-    }
+    }*/
 
 
     /**
      * 更新密码校验数据(国产化)
      * @param user 用户信息
      */
-    @Override
+/*    @Override
     public void updateCheckPassword(SysUser user) {
         LambdaQueryWrapper<SysCheckCode> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(SysCheckCode::getUserId, user.getUserId())
@@ -312,7 +313,7 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
         sysCheckCode.setPlaintext(user.getPassword());
         sysCheckCode.setVerificationResults(0);
         sysCheckCodeMapper.updateById(sysCheckCode);
-    }
+    }*/
 
     /**
      * 新增保存用户信息
@@ -323,17 +324,17 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
     @Override
     @Transactional
     public int insertUser(SysUser user) {
-        SysCheckCode sysCheckCode = new SysCheckCode();
+        // SysCheckCode sysCheckCode = new SysCheckCode();
         user.setUserType("00");
         user.setTenantId(SecurityUtils.getTenantId());
         user.setCreateBy(SecurityUtils.getUsername());
 
-        sysCheckCode.setPlaintext(user.getPassword());
-        try {
-            sysCheckCode.setCheckCode(operation.CBCMAC(user.getPassword().getBytes("UTF-8")));//存密码校验码
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
+        // sysCheckCode.setPlaintext(user.getPassword());
+        // try {
+        //     sysCheckCode.setCheckCode(operation.CBCMAC(user.getPassword().getBytes("UTF-8")));//存密码校验码
+        // } catch (UnsupportedEncodingException e) {
+        //     e.printStackTrace();
+        // }
 
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));//让校验码工具先获取原始明文密码的校验码在进行加密存储到sys_user表中
         // 新增用户信息
@@ -343,26 +344,26 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
         // 新增用户与角色管理
         insertUserRole(user);
 
-        sysCheckCode.setUserId(user.getUserId());
-        sysCheckCode.setUserName(user.getUserName());
-        sysCheckCode.setDeptId(user.getDeptId());
-        sysCheckCode.setTenantId(user.getTenantId());
-        sysCheckCode.setCheckCodeType(1);
-        sysCheckCodeMapper.insert(sysCheckCode);
-
-        sysCheckCode.setUserId(user.getUserId());
-        sysCheckCode.setUserName(user.getUserName());
-        sysCheckCode.setDeptId(user.getDeptId());
-        sysCheckCode.setTenantId(user.getTenantId());
-        sysCheckCode.setPlaintext(user.getPhonenumber());
-        try {
-            sysCheckCode.setCheckCode(operation.CBCMAC(user.getPhonenumber().getBytes("UTF-8")));//存手机校验码
-            sysCheckCode.setCiphertext(operation.SM4CBCEnc(user.getPhonenumber().getBytes("UTF-8")));//存手机号密文
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-        sysCheckCode.setCheckCodeType(2);
-        sysCheckCodeMapper.insert(sysCheckCode);
+        // sysCheckCode.setUserId(user.getUserId());
+        // sysCheckCode.setUserName(user.getUserName());
+        // sysCheckCode.setDeptId(user.getDeptId());
+        // sysCheckCode.setTenantId(user.getTenantId());
+        // sysCheckCode.setCheckCodeType(1);
+        // sysCheckCodeMapper.insert(sysCheckCode);
+
+        // sysCheckCode.setUserId(user.getUserId());
+        // sysCheckCode.setUserName(user.getUserName());
+        // sysCheckCode.setDeptId(user.getDeptId());
+        // sysCheckCode.setTenantId(user.getTenantId());
+        // sysCheckCode.setPlaintext(user.getPhonenumber());
+        // try {
+        //     sysCheckCode.setCheckCode(operation.CBCMAC(user.getPhonenumber().getBytes("UTF-8")));//存手机校验码
+        //     sysCheckCode.setCiphertext(operation.SM4CBCEnc(user.getPhonenumber().getBytes("UTF-8")));//存手机号密文
+        // } catch (UnsupportedEncodingException e) {
+        //     e.printStackTrace();
+        // }
+        // sysCheckCode.setCheckCodeType(2);
+        // sysCheckCodeMapper.insert(sysCheckCode);
 
         return rows;
     }

+ 230 - 230
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/App.java

@@ -1,230 +1,230 @@
-package com.usky.system.service.util;
-
-import java.io.UnsupportedEncodingException;
-
-/**
- * CCSP Demo
- *
- */
-public class App 
-{
-	static Operation operation = null;
-	public static void main( String[] args )throws Exception
-	{
-		operation = new Operation();
-		
-
-		System.out.println( "应用系统密码应用工作流程演示示例" );
-
-		System.out.println("1、访问控制信息【完整性】保护");
-
-		AccessControlInformationIntegrityProtection();
-
-
-		System.out.println();
-		System.out.println("2、敏感数据存储【机密性】+【完整性】保护");
-
-		DataStorageProtection();
-
-		System.out.println();
-		System.out.println("3、日志数据存储【完整性】保护");
-
-		LogDataStorageProtection();
-
-		System.out.println();
-		System.out.println("4、操作行为【抗抵赖性】保护");
-		OperationalBehaviorProtection();
-
-		System.out.println();
-		System.out.println("5、文件【机密性】+【完整性】保护");
-		FileStorageProtection();
-
-		SignatureValue();
-
-	}
-	//访问控制信息完整性保护示例
-	public static void AccessControlInformationIntegrityProtection() throws UnsupportedEncodingException {
-
-		System.out.println(">>>>访问控制信息存储MAC计算:");
-
-		//访问控制信息的获取
-		String str1 = "Mh_admin123_YT";
-		System.out.println("        测试数据: [ "+str1+" ] ");
-
-		//访问控制信息校验码计算
-		String mac1 = operation.CBCMAC(str1.getBytes("UTF-8"));
-		System.out.println("        计算得到的MAC值:mac1 = [ "+mac1+" ] ");
-
-		System.out.println("        记录MAC值,待读取校验时使用");
-
-		System.out.println(">>>>访问控制信息读取完整性校验:");
-		
-		//访问控制信息的读取
-		String str2 = str1;
-		System.out.println("        读取的测试数据: [ "+str2+" ] ");
-
-		//访问控制信息校验码计算
-		String mac2 = operation.CBCMAC(str2.getBytes("UTF-8"));
-		System.out.println("        计算得到的MAC值:mac2 = [ "+mac2+" ] ");
-
-		//比较mac1和mac2
-		if (mac1.equals(mac2)) {
-			System.out.println("【完整性】校验成功,访问控制信息数据是完整的");
-		}else {
-			System.out.println("【完整性】校验失败,访问控制信息是被破坏或者篡改的");
-		}
-	}
-
-	//数据存储安全,机密性和完整性保护示例
-	public static void DataStorageProtection() throws UnsupportedEncodingException{
-
-		System.out.println(">>>>敏感数据安全存储:");
-
-		//敏感数据的获取
-		String str1 = "13345678910";
-		System.out.println("        敏感数据: 某人员身份证号码=  [ "+str1+" ] ");
-
-		//敏感数据校验码计算
-		String mac1 = operation.CBCMAC(str1.getBytes("UTF-8"));
-
-		System.out.println("        存储敏感数据的MAC值:mac1 = [ "+mac1+" ] ");
-
-		//敏感数据加密存储
-		String encData1 = operation.SM4CBCEnc(str1.getBytes("UTF-8"));
-
-		System.out.println("        存储敏感数据密文: encData = [ "+encData1+" ] ");
-
-
-		System.out.println(">>>>敏感数据读取:");
-		//敏感数据的读取
-		String encData2 = encData1;
-		System.out.println("        读取的敏感数据密文: [ "+encData2+" ] ");
-
-		//敏感数据密文脱密
-		byte[] mgData = null;
-		mgData = operation.SM4CBCDec(encData2);
-
-		//访问控制信息校验码计算
-		String mac2 = operation.CBCMAC(mgData);
-		System.out.println("        计算得到敏感数据的MAC值:mac2 = [ "+mac2+" ] ");
-
-		//比较mac1和mac2
-		if (mac1.equals(mac2)) {
-			System.out.println("【完整性】校验成功,访问控制信息数据是完整的");
-		}else {
-			System.out.println("【完整性】校验失败,访问控制信息是被破坏或者篡改的");
-		}
-		System.out.println("【解密】得到的敏感数据: mgData=  [ "+(new String(mgData,"UTF-8"))+" ] ");
-
-	}
-
-	//日志数据存储,完整性保护示例
-	public static void LogDataStorageProtection() throws UnsupportedEncodingException{
-
-		System.out.println(">>>>日志数据安全存储:");
-
-		//日志数据的获取
-		String str1 = "xx年xx月1日 xx时x分:xxxx业务处理日志信息,xxxx";
-		System.out.println("        日志数据: str1=  [ "+str1+" ] ");
-
-		//敏感数据校验码计算
-		String mac1 = operation.CBCMAC(str1.getBytes("UTF-8"));
-
-		System.out.println("        存储日志数据的MAC值:mac1 = [ "+mac1+" ] ");
-
-		System.out.println(">>>>日志数据读取完整性校验:");
-		//日志数据的读取
-		String str2 = "111111";
-		System.out.println("        读取的日志数据: [ "+str2+" ] ");
-
-		//日志数据校验码计算
-		String mac2 = operation.CBCMAC(str2.getBytes("UTF-8"));
-		System.out.println("        计算得到的MAC值:mac21 = [ "+mac2+" ] ");
-
-		//比较mac1和mac2
-		if (mac1.equals(mac2)) {
-			System.out.println("【完整性】校验成功,日志数据是完整的");
-		}else {
-			System.out.println("【完整性】校验失败,日志数据是被破坏或者篡改的");
-		}
-	}
-
-	//操作行为抗抵赖性验证
-	public static void OperationalBehaviorProtection() throws UnsupportedEncodingException {
-		
-		//对某条操作数据进行抗抵赖验证
-		//读取需要验证的那条操作记录数据
-		String str1 = "helloword";
-		//读取该条操作记录对应的签名值
-//		String GMsignValue = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdKATLom+LLjirYnRXHShnw7xxLyrQpdzM+6p1oQS+KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7oZdaby392y2ogsDYsHeJ14CXwrxzAkn0nq4cKbJAzc=";
-		String derSignValue = "MEYCIQDdKATLom+LLjirYnRXHShnw7xxLyrQpdzM+6p1oQS+KQIhAO6GXWm8t/dstqILA2LB3ideAl8K8cwJJ9J6uHCmyQM3";
-		//读取该条操作记录对应的公钥证书
-		String publickeyCert ="MIIEfzCCBCKgAwIBAgIIPfUASAAJd9owDAYIKoEcz1UBg3UFADBpMQswCQYDVQQGEwJDTjE8MDoGA1UECgwzTmF0aW9uYWwgRS1Hb3Zlcm5tZW50IE5ldHdvcmsgQWRtaW5pc3RyYXRpb24gQ2VudGVyMRwwGgYDVQQDDBNDRUdOIFNNMiBDbGFzcyAyIENBMB4XDTE5MDQyOTA0MTIxMloXDTIyMDQyODA0MTIxMlowgaQxCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnkupHljZfnnIExEjAQBgNVBAcMCeaYhuaYjuW4gjESMBAGA1UEBwwJ6KW/5bGx5Yy6MRswGQYDVQQKDBLkupHljZfnnIHmoaPmoYjlsYAxEjAQBgNVBAsMCeWKnuWFrOWupDEUMBIGA1UEKgwLMTM5MDg4NTE4NjYxEjAQBgNVBAMMCem7hOWHpOW5szBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABM48SLbzKVhyfoqd0hIdk2AbFQJJ5qw/Fp/CFe2rV8g9Xvy3q4XvDMomjLNnGeLeUsgCDqIusalgwtPJNRUAIUqjggJ0MIICcDAMBgNVHRMEBTADAQEAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAOBgNVHQ8BAf8EBAMCAMAwEQYJYIZIAYb4QgEBBAQDAgCAMFQGA1UdIARNMEswSQYIKwYBBQUHAgEwPTA7BggrBgEFBQcCARYvaHR0cDovL3d3dy5zdGF0ZWNhLmdvdi5jbi9Db2x1bW4vQ29sdW1uXzI0OC5odG0wHwYDVR0jBBgwFoAUucCMM4GesPqheyNyP0OU7qnWfn0wgcUGA1UdHwSBvTCBujCBt6CBtKCBsYaBrmxkYXA6Ly9sZGFwLnN0YXRlY2EuY2Vnbi5jbjozODkvQ049Q0VHTiBTTTIgQ2xhc3MgMiBDQSxDTj1DRUdOIFNNMiBDbGFzcyAyIENBLCBPVT1DUkxEaXN0cmlidXRlUG9pbnRzLCBvPXNpY2NhP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDCBvwYIKwYBBQUHAQEEgbIwga8wgawGCCsGAQUFBzAChoGfbGRhcDovL2xkYXAuc3RhdGVjYS5jZWduLmNuOjM4OS9DTj1DRUdOIFNNMiBDbGFzcyAyIENBLENOPUNFR04gU00yIENsYXNzIDIgQ0EsIE9VPWNBQ2VydGlmaWNhdGVzLCBvPXNpY2NhP2NBQ2VydGlmaWNhdGU/YmFzZT9vYmplY3RDbGFzcz1jZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MB0GA1UdDgQWBBRRVjRIJ6LKL8/3NQjWhgR8MEXGODAMBggqgRzPVQGDdQUAA0kAMEYCIQDVOoz/NovQDFHk79mq6dxVq4XR0IfgwI1CBnNM4NoLVgIhAK1mLECcnDEP11pHjxu9uJXdqcHdfKvKD8RVVrgz+36G";
-		//进行数字验签运算
-		System.out.println(">>>>操作行为抗抵赖验证:");
-		boolean rs = operation.sm2VerByCert(str1.getBytes("UTF-8"),derSignValue , publickeyCert);
-		if (rs) {
-			System.out.println("【抗抵赖性】验证成功,该条操作是该用户所为,不可抵赖");
-		}else {
-			System.out.println("【抗抵赖性】验证失败,该条操作不是该用户所为");
-		}
-	}
-	public static void testSm2SignVer() throws UnsupportedEncodingException {
-		operation.sm2SignVer();
-	}
-	
-	//文件机密性,完整性保护示例
-	public static void FileStorageProtection(){
-		System.out.println(">>>>文件存储安全保护示例:");
-
-		//文件数据的获取
-		String filename = "F:\\Gitcode\\usky\\data-agbox-java-master.zip";
-		String str1 = filename;
-		System.out.println("        文件路径: 示例用的文件 =  [ "+str1+" ] ");
-
-		//文件校验码计算
-		String mac1 = operation.SM3AndCMAC(str1);
-		System.out.println("        文件的MAC值:mac1 = [ "+mac1+" ] ");
-		
-		//敏感数据加密存储
-		String str1Enc = str1+".enc";
-		System.out.println("        对源文件进行加密中... ");
-		operation.SM4CBCEnc(str1,str1Enc);
-
-		System.out.println("        对源文件加密完成,得到密文文件  [ "+str1Enc+" ] ");
-
-
-		System.out.println(">>>>密文文件读取:");
-		//密文的读取
-		String encData2 = str1Enc;
-		System.out.println("        示例使用的密文文件名字: [ "+encData2+" ] ");
-
-		//密文文件脱密
-		String str1Dec = filename+".dec";
-		System.out.println("        对密文文件进行解密中... ");
-		
-		operation.SM4CBCDec(encData2,str1Dec);
-		System.out.println("        【解密】对密文文件解密完成,得到脱密后的文件[ "+str1Dec+" ] ");
-
-		//文件校验码计算
-		String mac2 = operation.SM3AndCMAC(str1Dec);
-		System.out.println("        计算得到脱密后文件的MAC值:mac2 = [ "+mac2+" ] ");
-
-		//比较mac1和mac2
-		if (mac1.equals(mac2)) {
-			System.out.println("【完整性】校验成功,访问控制信息数据是完整的");
-		}else {
-			System.out.println("【完整性】校验失败,访问控制信息是被破坏或者篡改的");
-		}
-
-	}
-
-	//口令签名值
-	public static void SignatureValue() throws UnsupportedEncodingException {
-		String str1 = "Mh_admin123_YT";
-		String macValue = operation.HMAC(str1.getBytes("UTF-8"));
-		System.out.println("口令签名" + macValue);
-	}
-	
-	
-}
+// package com.usky.system.service.util;
+//
+// import java.io.UnsupportedEncodingException;
+//
+// /**
+//  * CCSP Demo
+//  *
+//  */
+// public class App
+// {
+// 	static Operation operation = null;
+// 	public static void main( String[] args )throws Exception
+// 	{
+// 		operation = new Operation();
+//
+//
+// 		System.out.println( "应用系统密码应用工作流程演示示例" );
+//
+// 		System.out.println("1、访问控制信息【完整性】保护");
+//
+// 		AccessControlInformationIntegrityProtection();
+//
+//
+// 		System.out.println();
+// 		System.out.println("2、敏感数据存储【机密性】+【完整性】保护");
+//
+// 		DataStorageProtection();
+//
+// 		System.out.println();
+// 		System.out.println("3、日志数据存储【完整性】保护");
+//
+// 		LogDataStorageProtection();
+//
+// 		System.out.println();
+// 		System.out.println("4、操作行为【抗抵赖性】保护");
+// 		OperationalBehaviorProtection();
+//
+// 		System.out.println();
+// 		System.out.println("5、文件【机密性】+【完整性】保护");
+// 		FileStorageProtection();
+//
+// 		SignatureValue();
+//
+// 	}
+// 	//访问控制信息完整性保护示例
+// 	public static void AccessControlInformationIntegrityProtection() throws UnsupportedEncodingException {
+//
+// 		System.out.println(">>>>访问控制信息存储MAC计算:");
+//
+// 		//访问控制信息的获取
+// 		String str1 = "Mh_admin123_YT";
+// 		System.out.println("        测试数据: [ "+str1+" ] ");
+//
+// 		//访问控制信息校验码计算
+// 		String mac1 = operation.CBCMAC(str1.getBytes("UTF-8"));
+// 		System.out.println("        计算得到的MAC值:mac1 = [ "+mac1+" ] ");
+//
+// 		System.out.println("        记录MAC值,待读取校验时使用");
+//
+// 		System.out.println(">>>>访问控制信息读取完整性校验:");
+//
+// 		//访问控制信息的读取
+// 		String str2 = str1;
+// 		System.out.println("        读取的测试数据: [ "+str2+" ] ");
+//
+// 		//访问控制信息校验码计算
+// 		String mac2 = operation.CBCMAC(str2.getBytes("UTF-8"));
+// 		System.out.println("        计算得到的MAC值:mac2 = [ "+mac2+" ] ");
+//
+// 		//比较mac1和mac2
+// 		if (mac1.equals(mac2)) {
+// 			System.out.println("【完整性】校验成功,访问控制信息数据是完整的");
+// 		}else {
+// 			System.out.println("【完整性】校验失败,访问控制信息是被破坏或者篡改的");
+// 		}
+// 	}
+//
+// 	//数据存储安全,机密性和完整性保护示例
+// 	public static void DataStorageProtection() throws UnsupportedEncodingException{
+//
+// 		System.out.println(">>>>敏感数据安全存储:");
+//
+// 		//敏感数据的获取
+// 		String str1 = "13345678910";
+// 		System.out.println("        敏感数据: 某人员身份证号码=  [ "+str1+" ] ");
+//
+// 		//敏感数据校验码计算
+// 		String mac1 = operation.CBCMAC(str1.getBytes("UTF-8"));
+//
+// 		System.out.println("        存储敏感数据的MAC值:mac1 = [ "+mac1+" ] ");
+//
+// 		//敏感数据加密存储
+// 		String encData1 = operation.SM4CBCEnc(str1.getBytes("UTF-8"));
+//
+// 		System.out.println("        存储敏感数据密文: encData = [ "+encData1+" ] ");
+//
+//
+// 		System.out.println(">>>>敏感数据读取:");
+// 		//敏感数据的读取
+// 		String encData2 = encData1;
+// 		System.out.println("        读取的敏感数据密文: [ "+encData2+" ] ");
+//
+// 		//敏感数据密文脱密
+// 		byte[] mgData = null;
+// 		mgData = operation.SM4CBCDec(encData2);
+//
+// 		//访问控制信息校验码计算
+// 		String mac2 = operation.CBCMAC(mgData);
+// 		System.out.println("        计算得到敏感数据的MAC值:mac2 = [ "+mac2+" ] ");
+//
+// 		//比较mac1和mac2
+// 		if (mac1.equals(mac2)) {
+// 			System.out.println("【完整性】校验成功,访问控制信息数据是完整的");
+// 		}else {
+// 			System.out.println("【完整性】校验失败,访问控制信息是被破坏或者篡改的");
+// 		}
+// 		System.out.println("【解密】得到的敏感数据: mgData=  [ "+(new String(mgData,"UTF-8"))+" ] ");
+//
+// 	}
+//
+// 	//日志数据存储,完整性保护示例
+// 	public static void LogDataStorageProtection() throws UnsupportedEncodingException{
+//
+// 		System.out.println(">>>>日志数据安全存储:");
+//
+// 		//日志数据的获取
+// 		String str1 = "xx年xx月1日 xx时x分:xxxx业务处理日志信息,xxxx";
+// 		System.out.println("        日志数据: str1=  [ "+str1+" ] ");
+//
+// 		//敏感数据校验码计算
+// 		String mac1 = operation.CBCMAC(str1.getBytes("UTF-8"));
+//
+// 		System.out.println("        存储日志数据的MAC值:mac1 = [ "+mac1+" ] ");
+//
+// 		System.out.println(">>>>日志数据读取完整性校验:");
+// 		//日志数据的读取
+// 		String str2 = "111111";
+// 		System.out.println("        读取的日志数据: [ "+str2+" ] ");
+//
+// 		//日志数据校验码计算
+// 		String mac2 = operation.CBCMAC(str2.getBytes("UTF-8"));
+// 		System.out.println("        计算得到的MAC值:mac21 = [ "+mac2+" ] ");
+//
+// 		//比较mac1和mac2
+// 		if (mac1.equals(mac2)) {
+// 			System.out.println("【完整性】校验成功,日志数据是完整的");
+// 		}else {
+// 			System.out.println("【完整性】校验失败,日志数据是被破坏或者篡改的");
+// 		}
+// 	}
+//
+// 	//操作行为抗抵赖性验证
+// 	public static void OperationalBehaviorProtection() throws UnsupportedEncodingException {
+//
+// 		//对某条操作数据进行抗抵赖验证
+// 		//读取需要验证的那条操作记录数据
+// 		String str1 = "helloword";
+// 		//读取该条操作记录对应的签名值
+// //		String GMsignValue = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdKATLom+LLjirYnRXHShnw7xxLyrQpdzM+6p1oQS+KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7oZdaby392y2ogsDYsHeJ14CXwrxzAkn0nq4cKbJAzc=";
+// 		String derSignValue = "MEYCIQDdKATLom+LLjirYnRXHShnw7xxLyrQpdzM+6p1oQS+KQIhAO6GXWm8t/dstqILA2LB3ideAl8K8cwJJ9J6uHCmyQM3";
+// 		//读取该条操作记录对应的公钥证书
+// 		String publickeyCert ="MIIEfzCCBCKgAwIBAgIIPfUASAAJd9owDAYIKoEcz1UBg3UFADBpMQswCQYDVQQGEwJDTjE8MDoGA1UECgwzTmF0aW9uYWwgRS1Hb3Zlcm5tZW50IE5ldHdvcmsgQWRtaW5pc3RyYXRpb24gQ2VudGVyMRwwGgYDVQQDDBNDRUdOIFNNMiBDbGFzcyAyIENBMB4XDTE5MDQyOTA0MTIxMloXDTIyMDQyODA0MTIxMlowgaQxCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnkupHljZfnnIExEjAQBgNVBAcMCeaYhuaYjuW4gjESMBAGA1UEBwwJ6KW/5bGx5Yy6MRswGQYDVQQKDBLkupHljZfnnIHmoaPmoYjlsYAxEjAQBgNVBAsMCeWKnuWFrOWupDEUMBIGA1UEKgwLMTM5MDg4NTE4NjYxEjAQBgNVBAMMCem7hOWHpOW5szBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABM48SLbzKVhyfoqd0hIdk2AbFQJJ5qw/Fp/CFe2rV8g9Xvy3q4XvDMomjLNnGeLeUsgCDqIusalgwtPJNRUAIUqjggJ0MIICcDAMBgNVHRMEBTADAQEAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAOBgNVHQ8BAf8EBAMCAMAwEQYJYIZIAYb4QgEBBAQDAgCAMFQGA1UdIARNMEswSQYIKwYBBQUHAgEwPTA7BggrBgEFBQcCARYvaHR0cDovL3d3dy5zdGF0ZWNhLmdvdi5jbi9Db2x1bW4vQ29sdW1uXzI0OC5odG0wHwYDVR0jBBgwFoAUucCMM4GesPqheyNyP0OU7qnWfn0wgcUGA1UdHwSBvTCBujCBt6CBtKCBsYaBrmxkYXA6Ly9sZGFwLnN0YXRlY2EuY2Vnbi5jbjozODkvQ049Q0VHTiBTTTIgQ2xhc3MgMiBDQSxDTj1DRUdOIFNNMiBDbGFzcyAyIENBLCBPVT1DUkxEaXN0cmlidXRlUG9pbnRzLCBvPXNpY2NhP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDCBvwYIKwYBBQUHAQEEgbIwga8wgawGCCsGAQUFBzAChoGfbGRhcDovL2xkYXAuc3RhdGVjYS5jZWduLmNuOjM4OS9DTj1DRUdOIFNNMiBDbGFzcyAyIENBLENOPUNFR04gU00yIENsYXNzIDIgQ0EsIE9VPWNBQ2VydGlmaWNhdGVzLCBvPXNpY2NhP2NBQ2VydGlmaWNhdGU/YmFzZT9vYmplY3RDbGFzcz1jZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MB0GA1UdDgQWBBRRVjRIJ6LKL8/3NQjWhgR8MEXGODAMBggqgRzPVQGDdQUAA0kAMEYCIQDVOoz/NovQDFHk79mq6dxVq4XR0IfgwI1CBnNM4NoLVgIhAK1mLECcnDEP11pHjxu9uJXdqcHdfKvKD8RVVrgz+36G";
+// 		//进行数字验签运算
+// 		System.out.println(">>>>操作行为抗抵赖验证:");
+// 		boolean rs = operation.sm2VerByCert(str1.getBytes("UTF-8"),derSignValue , publickeyCert);
+// 		if (rs) {
+// 			System.out.println("【抗抵赖性】验证成功,该条操作是该用户所为,不可抵赖");
+// 		}else {
+// 			System.out.println("【抗抵赖性】验证失败,该条操作不是该用户所为");
+// 		}
+// 	}
+// 	public static void testSm2SignVer() throws UnsupportedEncodingException {
+// 		operation.sm2SignVer();
+// 	}
+//
+// 	//文件机密性,完整性保护示例
+// 	public static void FileStorageProtection(){
+// 		System.out.println(">>>>文件存储安全保护示例:");
+//
+// 		//文件数据的获取
+// 		String filename = "F:\\Gitcode\\usky\\data-agbox-java-master.zip";
+// 		String str1 = filename;
+// 		System.out.println("        文件路径: 示例用的文件 =  [ "+str1+" ] ");
+//
+// 		//文件校验码计算
+// 		String mac1 = operation.SM3AndCMAC(str1);
+// 		System.out.println("        文件的MAC值:mac1 = [ "+mac1+" ] ");
+//
+// 		//敏感数据加密存储
+// 		String str1Enc = str1+".enc";
+// 		System.out.println("        对源文件进行加密中... ");
+// 		operation.SM4CBCEnc(str1,str1Enc);
+//
+// 		System.out.println("        对源文件加密完成,得到密文文件  [ "+str1Enc+" ] ");
+//
+//
+// 		System.out.println(">>>>密文文件读取:");
+// 		//密文的读取
+// 		String encData2 = str1Enc;
+// 		System.out.println("        示例使用的密文文件名字: [ "+encData2+" ] ");
+//
+// 		//密文文件脱密
+// 		String str1Dec = filename+".dec";
+// 		System.out.println("        对密文文件进行解密中... ");
+//
+// 		operation.SM4CBCDec(encData2,str1Dec);
+// 		System.out.println("        【解密】对密文文件解密完成,得到脱密后的文件[ "+str1Dec+" ] ");
+//
+// 		//文件校验码计算
+// 		String mac2 = operation.SM3AndCMAC(str1Dec);
+// 		System.out.println("        计算得到脱密后文件的MAC值:mac2 = [ "+mac2+" ] ");
+//
+// 		//比较mac1和mac2
+// 		if (mac1.equals(mac2)) {
+// 			System.out.println("【完整性】校验成功,访问控制信息数据是完整的");
+// 		}else {
+// 			System.out.println("【完整性】校验失败,访问控制信息是被破坏或者篡改的");
+// 		}
+//
+// 	}
+//
+// 	//口令签名值
+// 	public static void SignatureValue() throws UnsupportedEncodingException {
+// 		String str1 = "Mh_admin123_YT";
+// 		String macValue = operation.HMAC(str1.getBytes("UTF-8"));
+// 		System.out.println("口令签名" + macValue);
+// 	}
+//
+//
+// }

+ 561 - 561
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/Operation.java

@@ -1,561 +1,561 @@
-package com.usky.system.service.util;
-
-import algo.sm2.util.encoders.Base64;
-import com.ccsp.device.SDFFactory;
-import com.ccsp.device.bean.GlobalData;
-import com.ccsp.device.bean.SM2refPublicKey;
-import com.ccsp.device.bean.SM2refSignature;
-import com.ccsp.device.bean.SessionKeyContext;
-import com.ccsp.device.crypto.CryptoException;
-import com.ccsp.device.crypto.SDFCrypto;
-import com.sansec.jcajce.provider.asymmetric.sm2.JCESM2PublicKey;
-import com.sansec.jce.provider.SwxaProvider;
-import com.sansec.util.BigIntegerUitl;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-import java.io.UnsupportedEncodingException;
-import java.security.Security;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.util.concurrent.CancellationException;
-
-public class Operation {
-
-	static SDFCrypto crypto;
-	static SDFCrypto crypto2;
-	//通过默认配置文件去初始化连接,如果配置文件位于接口库当前路径,参数传空即可。
-    static String filepath = "";
-
-	static String ip = "32.2.10.15"; // 公网环境:ip:60.217.194.220 端口:34012
-	static int port = 18007;
-	  static String appName = "mhxfyjpt";
-		static String password = "mhxf@1234";
-		static String sm4keyid = "mhxfyjpt_SM4_Random_DEK";
-		static String sm2Keyid = "mhxfyjpt_SM2_Standard";
-
-
-
-
-	static int algo_hash = GlobalData.SGD_SM3;
-	static int algo_cbc = GlobalData.SGD_SM4_CBC;
-	static int algo_ecb = GlobalData.SGD_SM4_ECB;
-	static int algo_mac = GlobalData.SGD_SM4_MAC;
-
-	static int block_MB = 1*1024*1024;
-	static int block_50MB = block_MB*50;
-
-    static int block_KB=1*1024;
-    static int block_10KB = block_MB*10;
-	//
-	public Operation() {
-		try {
-			Security.addProvider(new SwxaProvider(null,null));
-			crypto = SDFFactory.getInstance(ip , port , 40, 30, 1);
-			crypto.SDF_LoginbyAppNameAndPwd(appName, password);
-		} catch (CryptoException e) {
-			e.printStackTrace();
-		}
-	}
-
-
-	//对文件进行完整性计算
-	public String SM3AndCMAC(String file){
-		FileTools fileTool = new FileTools();
-		//获取文件大小
-		long fileSize = fileTool.getFileSize(file);
-		if (fileSize<=0) {
-			throw new RuntimeException("SM3AndCMAC error:"+"fileSize error");
-		}
-		RandomAccessFile rafr;
-		Object hashContext = null;
-		byte[] hash = null;
-		//组数
-		int groupNumber = 0;
-		//余数
-		int remainder = 0;
-		byte[] mac = null;
-		byte[] mac2=null;
-
-		groupNumber = (int)(fileSize/block_50MB);
-		remainder = (int)(fileSize%block_50MB);
-		String macValue = "";
-		String macValue2 = "";
-		try {
-			//read init
-			rafr = new RandomAccessFile(file, "r");
-			//开始sm3计算
-			hashContext = crypto.SDF_HashInit(algo_hash, null,null);
-			for (int i = 0; i < groupNumber; i++) {
-				crypto.SDF_HashUpdate(hashContext, fileTool.readFileByRAF(rafr, i*block_50MB, block_50MB));
-			}
-			if (remainder==0) {
-				hash = crypto.SDF_HashFinal(hashContext,null);
-			}else {
-				hash = crypto.SDF_HashFinal(hashContext,fileTool.readFileByRAF(rafr, groupNumber*block_50MB, remainder));
-			}
-			//开始CBCMAC计算
-			SessionKeyContext skc = new SessionKeyContext();
-			skc.setKeyID(sm4keyid.getBytes());
-			mac = crypto.SDF_CalculateMAC(skc, algo_mac, null, hash);
-			macValue = new String(Base64.encode(mac));
-
-			//end...
-			rafr.close();
-		} catch (Exception e) {
-			throw new RuntimeException("SM3AndCMAC error:"+e.getMessage());
-		}
-		return macValue;
-	}
-
-	//对文件进行机密性运算,输出密文文件
-	//sm4cbc加密
-	public void SM4CBCEnc(String originalFile,String encryptFile){
-		RandomAccessFile rafr;
-		RandomAccessFile rafw;
-		FileTools fileTool = new FileTools();
-		// 使用keyName构造key对象
-		SessionKeyContext skc = new SessionKeyContext();
-		skc.setKeyID(sm4keyid.getBytes());
-		try {
-			//read init
-			rafr = new RandomAccessFile(originalFile, "r");
-			byte[] tempEncdata = null;
-			byte[] inData = null;
-			byte[] inDataPading = null;
-			//组数
-			int groupNumber = 0;
-			//余数
-			int remainder = 0;
-			//获取文件大小
-			long fileSize = fileTool.getFileSize(originalFile);
-			if (fileSize<=0) {
-				throw new RuntimeException("SM4CBCEnc error:"+"fileSize error");
-			}
-			groupNumber = (int)(fileSize/block_50MB);
-			remainder = (int)(fileSize%block_50MB);
-			//创建临时的密文文件
-			String tempFile = encryptFile+".temp";
-			fileTool.creatFile(tempFile, fileSize+(16-remainder%16));
-			//writ init
-			rafw = new RandomAccessFile(tempFile, "rw");
-
-			//开始加密
-			for (int i = 0; i < groupNumber; i++) {
-				inData = fileTool.readFileByRAF(rafr,i*block_50MB, block_50MB);
-				tempEncdata = crypto.SDF_Encrypt(skc, algo_cbc, null, inData);
-				fileTool.writFileByRAF(rafw, i*block_50MB, tempEncdata);
-			}
-			inData = null;
-			inData = fileTool.readFileByRAF(rafr,groupNumber*block_50MB, remainder);
-			inDataPading = cbcPadding(inData);
-			tempEncdata = crypto.SDF_Encrypt(skc, algo_cbc, null, inDataPading);
-			fileTool.writFileByRAF(rafw, groupNumber*block_50MB, tempEncdata);
-
-			//end...
-			rafr.close();
-			rafw.close();
-			//改临时密文文件的名字
-			fileTool.reName(tempFile, encryptFile);
-		} catch (Exception e) {
-			throw new RuntimeException("SM4CBCEnc error:"+e.getMessage());
-		}
-	}
-	//sm4cbc解密
-	public void SM4CBCDec(String encryptFile, String decryptFile){
-		RandomAccessFile rafr;
-		RandomAccessFile rafw;
-		FileTools fileTool = new FileTools();
-
-		// 使用keyName构造key对象
-		SessionKeyContext skc = new SessionKeyContext();
-		skc.setKeyID(sm4keyid.getBytes());
-
-
-		try {
-			//read init
-			rafr = new RandomAccessFile(encryptFile, "r");
-
-
-			byte[] tempDecdata = null;
-			byte[] tempDecdataUnPading = null;
-			byte[] inData = null;
-
-			//组数
-			int groupNumber = 0;
-			//余数
-			int remainder = 0;
-			//原文文件大小
-			int decryptFileSize = 0;
-			String tempFile = decryptFile+".temp";
-			//获取文件大小
-			long fileSize = fileTool.getFileSize(encryptFile);
-			if (fileSize<=0) {
-				rafr.close();
-				throw new RuntimeException("SM4CBCDec error:"+"fileSize error");
-			}
-			groupNumber = (int)(fileSize/block_50MB);
-			remainder = (int)(fileSize%block_50MB);
-
-			//解最后的块
-			if (remainder!=0) {
-				inData = fileTool.readFileByRAF(rafr,groupNumber*block_50MB, remainder);
-				tempDecdata = crypto.SDF_Decrypt(skc, algo_cbc, null, inData);
-				tempDecdataUnPading = cbcUnPadding(tempDecdata);
-				decryptFileSize = (int)(fileSize - (remainder-tempDecdataUnPading.length));
-
-				//创建临时的密文文件
-				fileTool.creatFile(tempFile, decryptFileSize);
-				//writ init
-				rafw = new RandomAccessFile(tempFile, "rw");
-				fileTool.writFileByRAF(rafw, groupNumber*block_50MB, tempDecdataUnPading);
-
-			}else {
-				inData = fileTool.readFileByRAF(rafr,(groupNumber-1)*block_50MB, block_50MB);
-				tempDecdata = crypto.SDF_Decrypt(skc, algo_cbc, null, inData);
-				tempDecdataUnPading = cbcUnPadding(tempDecdata);
-				decryptFileSize = (int)(fileSize - (block_50MB-tempDecdataUnPading.length));
-
-				//创建临时的密文文件
-				fileTool.creatFile(tempFile, decryptFileSize);
-				//writ init
-				rafw = new RandomAccessFile(tempFile, "rw");
-				fileTool.writFileByRAF(rafw, (groupNumber-1)*block_50MB, tempDecdataUnPading);
-				groupNumber--;
-			}
-
-
-			//开始解密
-			for (int i = 0; i < groupNumber; i++) {
-				inData = fileTool.readFileByRAF(rafr,i*block_50MB, block_50MB);
-				tempDecdata = crypto.SDF_Decrypt(skc, algo_cbc, null, inData);
-				fileTool.writFileByRAF(rafw, i*block_50MB, tempDecdata);
-			}
-
-			//end...
-			rafr.close();
-			rafw.close();
-			//改临时密文文件的名字
-			fileTool.reName(tempFile, decryptFile);
-		} catch (Exception e) {
-			throw new RuntimeException("SM4CBCDec error:"+e.getMessage());
-		}
-	}
-
-
-
-	//CBCMAC-SM4计算
-	public String CBCMAC(byte[] inData){
-		SessionKeyContext skc = new SessionKeyContext();
-		skc.setKeyID(sm4keyid.getBytes());
-		byte[] mac = null;
-		byte[] paddingData = macPadding(inData);
-		try {
-			mac = crypto.SDF_CalculateMAC(skc, algo_mac, null, paddingData);
-		} catch (CryptoException e) {
-			e.printStackTrace();
-		}
-		String macValue = new String(Base64.encode(mac));
-		return macValue;
-	}
-
-
-	//Hmac计算  (测试)
-		public String HMAC(byte[] inData){
-			SessionKeyContext skc = new SessionKeyContext();
-			skc.setKeyID(sm4keyid.getBytes());
-			byte[] mac = null;
-			byte[] paddingData = macPadding(inData);
-			try {
-				mac = crypto.SDF_CalculateMAC(skc, algo_mac, null, paddingData);
-			} catch (CryptoException e) {
-				e.printStackTrace();
-			}
-			String macValue = new String(Base64.encode(mac));
-			return macValue;
-		}
-	//mac运算填充
-	public byte[] macPadding(byte[] inData) {
-		byte[] padData = {(byte)0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-		int remainder = inData.length%16;//余数
-		int padLength = 16 - remainder;
-		byte[] indatapad = new byte[inData.length+padLength];
-		System.arraycopy(inData, 0, indatapad, 0, inData.length);
-		System.arraycopy(padData, 0, indatapad, inData.length, padLength);
-		return indatapad;
-	}
-	//sm4cbc加密
-	public String SM4CBCEnc(byte[] inData){
-
-		// 使用keyName构造key对象
-		SessionKeyContext skc = new SessionKeyContext();
-		skc.setKeyID(sm4keyid.getBytes());
-		byte[] inDataPadding = cbcPadding(inData);
-		byte[] encdata = null;
-		try {
-			encdata = crypto.SDF_Encrypt(skc, algo_cbc, null, inDataPadding);
-		} catch (CryptoException e) {
-			e.printStackTrace();
-		}
-		String encdataStr = new String(Base64.encode(encdata));
-		return encdataStr;
-	}
-	//sm4cbc解密
-	public byte[] SM4CBCDec(String encStr){
-		byte[] indata = Base64.decode(encStr.getBytes());
-		// 使用keyName构造key对象
-		SessionKeyContext skc = new SessionKeyContext();
-		skc.setKeyID(sm4keyid.getBytes());
-
-		byte[] data = null;
-		try {
-			data = crypto.SDF_Decrypt(skc, algo_cbc, null, indata);
-		} catch (CryptoException e) {
-			e.printStackTrace();
-		}
-		byte[] outdata = cbcUnPadding(data);
-		return outdata;
-	}
-	//sm4加密数据填充
-	public byte[] cbcPadding(byte[] inData) {
-		byte[] padData = null;
-		int remainder = inData.length%16;//余数
-		int padLength = 16 - remainder;
-		padData = new byte[padLength];
-		for (int i = 0; i < padLength; i++) {
-			padData[i] = (byte)padLength;
-		}
-		byte[] indatapad = new byte[inData.length+padLength];
-		System.arraycopy(inData, 0, indatapad, 0, inData.length);
-		System.arraycopy(padData, 0, indatapad, inData.length, padLength);
-		return indatapad;
-	}
-	//sm4解密数据去填充
-	public byte[] cbcUnPadding(byte[] inData) {
-		byte[] outData = null;
-		int outDataLength = 0;
-		int padLength = (int)inData[inData.length-1];//余数
-		if (padLength>16||padLength<1) {
-			throw new RuntimeException("cbcUnPadding error,Data error");
-		}
-		outDataLength = inData.length-padLength;
-		outData = new byte[outDataLength];
-		System.arraycopy(inData, 0, outData, 0, outDataLength);
-		return outData;
-	}
-	//SM2数字签名
-	public String sm2Sign(byte[] inData) {
-		byte[] hash = null;
-		byte[] signValue = null;
-		SM2refPublicKey refPublicKey = null;
-		try {
-			refPublicKey =crypto.SDF_ExportPublicKey_ECC(sm2Keyid);
-			Object hashContext = null;
-			hashContext = crypto.SDF_HashInit(algo_hash, refPublicKey, "1234567812345678".getBytes());//算法为SM3时,第二个参数签名者公钥对象有效
-			crypto.SDF_HashUpdate(hashContext, inData);
-			hash = crypto.SDF_HashFinal(hashContext,null);
-			SM2refSignature sm2signValue = crypto.SDF_InternalSign_ECC(sm2Keyid,hash);
-			signValue = sm2signValue.encode();
-		} catch (CryptoException e) {
-			throw new RuntimeException("sm2Sign error:"+e.getMessage());
-		}
-		return new String(Base64.encode(signValue));
-	}
-
-	private byte[] getPubkeyByCert(String certStr) {
-		X509Certificate cert = null;
-		byte[] certByte = Base64.decode(certStr);
-		InputStream stream = new ByteArrayInputStream(certByte);
-
-		CertificateFactory factory = null;
-		try {
-			factory = CertificateFactory.getInstance("X.509", "SwxaJCE");
-			cert = (X509Certificate) factory.generateCertificate(stream);
-		} catch (CancellationException e) {
-			System.out.println("解析证书失败" + e.getMessage());
-			e.printStackTrace();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		JCESM2PublicKey pubKey = (JCESM2PublicKey)cert.getPublicKey();
-		byte[] pubkey = new byte[132];
-		for (int i = 0; i < pubkey.length; i++) {
-			pubkey[i]= 0x00;
-		}
-		pubkey[1] = 0x01;
-		System.arraycopy(BigIntegerUitl.asUnsigned32ByteArray(pubKey.getW().getAffineX()),0,pubkey,36,32);
-		System.arraycopy(BigIntegerUitl.asUnsigned32ByteArray(pubKey.getW().getAffineY()),0,pubkey,100,32);
-		return pubkey;
-	}
-
-	public String getSerialNumberByCert(String certStr) {
-		X509Certificate cert = null;
-		byte[] certByte = Base64.decode(certStr);
-		InputStream stream = new ByteArrayInputStream(certByte);
-
-		CertificateFactory factory = null;
-		try {
-			factory = CertificateFactory.getInstance("X.509", "SwxaJCE");
-			cert = (X509Certificate) factory.generateCertificate(stream);
-		} catch (CancellationException e) {
-			System.out.println("解析证书失败" + e.getMessage());
-			e.printStackTrace();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		String serialNumber = cert.getSerialNumber().toString(16);
-		return serialNumber;
-	}
-
-	private byte[] signValueDerToGm(byte[] derSignvalue) {
-		byte[] gm = new byte[128];
-		byte[] r = new byte[32];
-		byte[] s = new byte[32];
-		int p = 0;
-		if (derSignvalue[p]==0x30) {
-			p=p+2;
-			if (derSignvalue[p]==0x02) {
-				p = p+1;
-				if (derSignvalue[p]==0x20) {
-					p = p+1;
-					System.arraycopy(derSignvalue, p, r,0,32);
-					p = p+32;
-					if (derSignvalue[p]==0x02) {
-						p = p+1;
-						if (derSignvalue[p]==0x20) {
-							p = p+1;
-							System.arraycopy(derSignvalue, p, s,0,32);
-						}else if (derSignvalue[p]==0x21) {
-							p = p+2;
-							System.arraycopy(derSignvalue, p, s,0,32);
-						}else {
-							throw new RuntimeException("signValueDerToGm error");
-						}
-					}else {
-						throw new RuntimeException("signValueDerToGm error");
-					}
-				}else if (derSignvalue[p]==0x21) {
-					p = p+2;
-					System.arraycopy(derSignvalue, p, r,0,32);
-					p = p+32;
-					if (derSignvalue[p]==0x02) {
-						p = p+1;
-						if (derSignvalue[p]==0x20) {
-							p = p+1;
-							System.arraycopy(derSignvalue, p, s,0,32);
-						}else if (derSignvalue[p]==0x21) {
-							p = p+2;
-							System.arraycopy(derSignvalue, p, s,0,32);
-						}else {
-							throw new RuntimeException("signValueDerToGm error");
-						}
-					}else {
-						throw new RuntimeException("signValueDerToGm error");
-					}
-				}
-			}else {
-				throw new RuntimeException("signValueDerToGm error");
-			}
-		}else {
-			throw new RuntimeException("signValueDerToGm error");
-		}
-		for (int i = 0; i < gm.length; i++) {
-			gm[i]=0x00;
-		}
-
-		System.arraycopy(r, 0,gm,32,32);
-		System.arraycopy(s, 0,gm,96,32);
-
-
-		return gm;
-	}
-
-	//SM2数字验签
-	public boolean sm2VerByCert(byte[] inData,String signValue,String certStr ) {
-		boolean result = false;
-		byte[] hash = null;
-		byte signValueOne = signValue.getBytes()[0];
-		byte[] signValueByte = null;
-		if (signValueOne=='M') {
-			//将der转换成GM
-			signValueByte = signValueDerToGm(Base64.decode(signValue));
-		}else {
-			signValueByte = Base64.decode(signValue.getBytes());
-		}
-		byte[] pubkey = getPubkeyByCert(certStr);
-		SM2refSignature sm2refSignature = new SM2refSignature();
-		SM2refPublicKey refPublicKey = new SM2refPublicKey();
-		try {
-			refPublicKey.decode(pubkey);
-			sm2refSignature.decode(signValueByte);
-			Object hashContext = null;
-			hashContext = crypto.SDF_HashInit(algo_hash, refPublicKey, "1234567812345678".getBytes());//算法为SM3时,第二个参数签名者公钥对象有效
-			crypto.SDF_HashUpdate(hashContext, inData);
-			hash = crypto.SDF_HashFinal(hashContext,null);
-			result = crypto.SDF_ExternalVerify_ECC(refPublicKey, hash,sm2refSignature);
-			result = true;
-		} catch (CryptoException e) {
-			System.out.println("sm2Ver error:"+e.getMessage());
-			result = false;
-		}
-		return result;
-	}
-
-	//SM2数字验签
-	public boolean sm2Ver(byte[] inData,String signValue,String publickey ) {
-		boolean result = false;
-		byte[] hash = null;
-		byte[] signValueByte = Base64.decode(signValue.getBytes());
-		byte[] pubkeyByte = Base64.decode(publickey.getBytes());
-		SM2refSignature sm2refSignature = new SM2refSignature();
-		SM2refPublicKey refPublicKey = new SM2refPublicKey();
-		try {
-			refPublicKey.decode(pubkeyByte);
-			sm2refSignature.decode(signValueByte);
-			Object hashContext = null;
-			hashContext = crypto.SDF_HashInit(algo_hash, refPublicKey, "1234567812345678".getBytes());//算法为SM3时,第二个参数签名者公钥对象有效
-			crypto.SDF_HashUpdate(hashContext, inData);
-			hash = crypto.SDF_HashFinal(hashContext,null);
-			result = crypto.SDF_ExternalVerify_ECC(refPublicKey, hash,sm2refSignature);
-		} catch (CryptoException e) {
-			throw new RuntimeException("sm2Ver error:"+e.getMessage());
-		}
-		return result;
-	}
-	public boolean sm2SignVer() throws UnsupportedEncodingException {
-		byte[] inData = "修改某条业务数据xxx为yyy".getBytes("utf-8");
-		boolean result = false;
-		byte[] hash = null;
-		byte[] signValueByte = null; //= Base64.decode(signValue.getBytes());
-		byte[] pubkeyByte = null;//= Base64.decode(publickey.getBytes());
-		SM2refSignature sm2refSignature = new SM2refSignature();
-		SM2refPublicKey refPublicKey = new SM2refPublicKey();
-		try {
-			refPublicKey = crypto.SDF_ExportPublicKey_ECC(sm2Keyid);
-			Object hashContext = null;
-			hashContext = crypto.SDF_HashInit(algo_hash, refPublicKey, "1234567812345678".getBytes());//算法为SM3时,第二个参数签名者公钥对象有效
-			crypto.SDF_HashUpdate(hashContext, inData);
-			hash = crypto.SDF_HashFinal(hashContext,null);
-
-			sm2refSignature = crypto.SDF_InternalSign_ECC(sm2Keyid, hash);
-			System.out.println(new String(Base64.encode(refPublicKey.encode())));
-			System.out.println(new String(Base64.encode(sm2refSignature.encode())));
-			result = crypto.SDF_ExternalVerify_ECC(refPublicKey, hash,sm2refSignature);
-		} catch (CryptoException e) {
-			throw new RuntimeException("sm2Ver error:"+e.getMessage());
-		}
-		System.out.println("sm2SignVer 成功");
-		return result;
-	}
-	public String getSm2PublicKey() {
-		SM2refPublicKey refPublicKey = null;
-		try {
-			refPublicKey =crypto.SDF_ExportPublicKey_ECC(sm2Keyid);
-		} catch (CryptoException e) {
-			throw new RuntimeException("getSm2PublicKey error:"+e.getMessage());
-		}
-		return new String(Base64.encode(refPublicKey.encode()));
-	}
-
-}
+// package com.usky.system.service.util;
+//
+// import algo.sm2.util.encoders.Base64;
+// import com.ccsp.device.SDFFactory;
+// import com.ccsp.device.bean.GlobalData;
+// import com.ccsp.device.bean.SM2refPublicKey;
+// import com.ccsp.device.bean.SM2refSignature;
+// import com.ccsp.device.bean.SessionKeyContext;
+// import com.ccsp.device.crypto.CryptoException;
+// import com.ccsp.device.crypto.SDFCrypto;
+// import com.sansec.jcajce.provider.asymmetric.sm2.JCESM2PublicKey;
+// import com.sansec.jce.provider.SwxaProvider;
+// import com.sansec.util.BigIntegerUitl;
+//
+// import java.io.ByteArrayInputStream;
+// import java.io.InputStream;
+// import java.io.RandomAccessFile;
+// import java.io.UnsupportedEncodingException;
+// import java.security.Security;
+// import java.security.cert.CertificateFactory;
+// import java.security.cert.X509Certificate;
+// import java.util.concurrent.CancellationException;
+//
+// public class Operation {
+//
+// 	static SDFCrypto crypto;
+// 	static SDFCrypto crypto2;
+// 	//通过默认配置文件去初始化连接,如果配置文件位于接口库当前路径,参数传空即可。
+//     static String filepath = "";
+//
+// 	static String ip = "32.2.10.15"; // 公网环境:ip:60.217.194.220 端口:34012
+// 	static int port = 18007;
+// 	  static String appName = "mhxfyjpt";
+// 		static String password = "mhxf@1234";
+// 		static String sm4keyid = "mhxfyjpt_SM4_Random_DEK";
+// 		static String sm2Keyid = "mhxfyjpt_SM2_Standard";
+//
+//
+//
+//
+// 	static int algo_hash = GlobalData.SGD_SM3;
+// 	static int algo_cbc = GlobalData.SGD_SM4_CBC;
+// 	static int algo_ecb = GlobalData.SGD_SM4_ECB;
+// 	static int algo_mac = GlobalData.SGD_SM4_MAC;
+//
+// 	static int block_MB = 1*1024*1024;
+// 	static int block_50MB = block_MB*50;
+//
+//     static int block_KB=1*1024;
+//     static int block_10KB = block_MB*10;
+// 	//
+// 	public Operation() {
+// 		try {
+// 			Security.addProvider(new SwxaProvider(null,null));
+// 			crypto = SDFFactory.getInstance(ip , port , 40, 30, 1);
+// 			crypto.SDF_LoginbyAppNameAndPwd(appName, password);
+// 		} catch (CryptoException e) {
+// 			e.printStackTrace();
+// 		}
+// 	}
+//
+//
+// 	//对文件进行完整性计算
+// 	public String SM3AndCMAC(String file){
+// 		FileTools fileTool = new FileTools();
+// 		//获取文件大小
+// 		long fileSize = fileTool.getFileSize(file);
+// 		if (fileSize<=0) {
+// 			throw new RuntimeException("SM3AndCMAC error:"+"fileSize error");
+// 		}
+// 		RandomAccessFile rafr;
+// 		Object hashContext = null;
+// 		byte[] hash = null;
+// 		//组数
+// 		int groupNumber = 0;
+// 		//余数
+// 		int remainder = 0;
+// 		byte[] mac = null;
+// 		byte[] mac2=null;
+//
+// 		groupNumber = (int)(fileSize/block_50MB);
+// 		remainder = (int)(fileSize%block_50MB);
+// 		String macValue = "";
+// 		String macValue2 = "";
+// 		try {
+// 			//read init
+// 			rafr = new RandomAccessFile(file, "r");
+// 			//开始sm3计算
+// 			hashContext = crypto.SDF_HashInit(algo_hash, null,null);
+// 			for (int i = 0; i < groupNumber; i++) {
+// 				crypto.SDF_HashUpdate(hashContext, fileTool.readFileByRAF(rafr, i*block_50MB, block_50MB));
+// 			}
+// 			if (remainder==0) {
+// 				hash = crypto.SDF_HashFinal(hashContext,null);
+// 			}else {
+// 				hash = crypto.SDF_HashFinal(hashContext,fileTool.readFileByRAF(rafr, groupNumber*block_50MB, remainder));
+// 			}
+// 			//开始CBCMAC计算
+// 			SessionKeyContext skc = new SessionKeyContext();
+// 			skc.setKeyID(sm4keyid.getBytes());
+// 			mac = crypto.SDF_CalculateMAC(skc, algo_mac, null, hash);
+// 			macValue = new String(Base64.encode(mac));
+//
+// 			//end...
+// 			rafr.close();
+// 		} catch (Exception e) {
+// 			throw new RuntimeException("SM3AndCMAC error:"+e.getMessage());
+// 		}
+// 		return macValue;
+// 	}
+//
+// 	//对文件进行机密性运算,输出密文文件
+// 	//sm4cbc加密
+// 	public void SM4CBCEnc(String originalFile,String encryptFile){
+// 		RandomAccessFile rafr;
+// 		RandomAccessFile rafw;
+// 		FileTools fileTool = new FileTools();
+// 		// 使用keyName构造key对象
+// 		SessionKeyContext skc = new SessionKeyContext();
+// 		skc.setKeyID(sm4keyid.getBytes());
+// 		try {
+// 			//read init
+// 			rafr = new RandomAccessFile(originalFile, "r");
+// 			byte[] tempEncdata = null;
+// 			byte[] inData = null;
+// 			byte[] inDataPading = null;
+// 			//组数
+// 			int groupNumber = 0;
+// 			//余数
+// 			int remainder = 0;
+// 			//获取文件大小
+// 			long fileSize = fileTool.getFileSize(originalFile);
+// 			if (fileSize<=0) {
+// 				throw new RuntimeException("SM4CBCEnc error:"+"fileSize error");
+// 			}
+// 			groupNumber = (int)(fileSize/block_50MB);
+// 			remainder = (int)(fileSize%block_50MB);
+// 			//创建临时的密文文件
+// 			String tempFile = encryptFile+".temp";
+// 			fileTool.creatFile(tempFile, fileSize+(16-remainder%16));
+// 			//writ init
+// 			rafw = new RandomAccessFile(tempFile, "rw");
+//
+// 			//开始加密
+// 			for (int i = 0; i < groupNumber; i++) {
+// 				inData = fileTool.readFileByRAF(rafr,i*block_50MB, block_50MB);
+// 				tempEncdata = crypto.SDF_Encrypt(skc, algo_cbc, null, inData);
+// 				fileTool.writFileByRAF(rafw, i*block_50MB, tempEncdata);
+// 			}
+// 			inData = null;
+// 			inData = fileTool.readFileByRAF(rafr,groupNumber*block_50MB, remainder);
+// 			inDataPading = cbcPadding(inData);
+// 			tempEncdata = crypto.SDF_Encrypt(skc, algo_cbc, null, inDataPading);
+// 			fileTool.writFileByRAF(rafw, groupNumber*block_50MB, tempEncdata);
+//
+// 			//end...
+// 			rafr.close();
+// 			rafw.close();
+// 			//改临时密文文件的名字
+// 			fileTool.reName(tempFile, encryptFile);
+// 		} catch (Exception e) {
+// 			throw new RuntimeException("SM4CBCEnc error:"+e.getMessage());
+// 		}
+// 	}
+// 	//sm4cbc解密
+// 	public void SM4CBCDec(String encryptFile, String decryptFile){
+// 		RandomAccessFile rafr;
+// 		RandomAccessFile rafw;
+// 		FileTools fileTool = new FileTools();
+//
+// 		// 使用keyName构造key对象
+// 		SessionKeyContext skc = new SessionKeyContext();
+// 		skc.setKeyID(sm4keyid.getBytes());
+//
+//
+// 		try {
+// 			//read init
+// 			rafr = new RandomAccessFile(encryptFile, "r");
+//
+//
+// 			byte[] tempDecdata = null;
+// 			byte[] tempDecdataUnPading = null;
+// 			byte[] inData = null;
+//
+// 			//组数
+// 			int groupNumber = 0;
+// 			//余数
+// 			int remainder = 0;
+// 			//原文文件大小
+// 			int decryptFileSize = 0;
+// 			String tempFile = decryptFile+".temp";
+// 			//获取文件大小
+// 			long fileSize = fileTool.getFileSize(encryptFile);
+// 			if (fileSize<=0) {
+// 				rafr.close();
+// 				throw new RuntimeException("SM4CBCDec error:"+"fileSize error");
+// 			}
+// 			groupNumber = (int)(fileSize/block_50MB);
+// 			remainder = (int)(fileSize%block_50MB);
+//
+// 			//解最后的块
+// 			if (remainder!=0) {
+// 				inData = fileTool.readFileByRAF(rafr,groupNumber*block_50MB, remainder);
+// 				tempDecdata = crypto.SDF_Decrypt(skc, algo_cbc, null, inData);
+// 				tempDecdataUnPading = cbcUnPadding(tempDecdata);
+// 				decryptFileSize = (int)(fileSize - (remainder-tempDecdataUnPading.length));
+//
+// 				//创建临时的密文文件
+// 				fileTool.creatFile(tempFile, decryptFileSize);
+// 				//writ init
+// 				rafw = new RandomAccessFile(tempFile, "rw");
+// 				fileTool.writFileByRAF(rafw, groupNumber*block_50MB, tempDecdataUnPading);
+//
+// 			}else {
+// 				inData = fileTool.readFileByRAF(rafr,(groupNumber-1)*block_50MB, block_50MB);
+// 				tempDecdata = crypto.SDF_Decrypt(skc, algo_cbc, null, inData);
+// 				tempDecdataUnPading = cbcUnPadding(tempDecdata);
+// 				decryptFileSize = (int)(fileSize - (block_50MB-tempDecdataUnPading.length));
+//
+// 				//创建临时的密文文件
+// 				fileTool.creatFile(tempFile, decryptFileSize);
+// 				//writ init
+// 				rafw = new RandomAccessFile(tempFile, "rw");
+// 				fileTool.writFileByRAF(rafw, (groupNumber-1)*block_50MB, tempDecdataUnPading);
+// 				groupNumber--;
+// 			}
+//
+//
+// 			//开始解密
+// 			for (int i = 0; i < groupNumber; i++) {
+// 				inData = fileTool.readFileByRAF(rafr,i*block_50MB, block_50MB);
+// 				tempDecdata = crypto.SDF_Decrypt(skc, algo_cbc, null, inData);
+// 				fileTool.writFileByRAF(rafw, i*block_50MB, tempDecdata);
+// 			}
+//
+// 			//end...
+// 			rafr.close();
+// 			rafw.close();
+// 			//改临时密文文件的名字
+// 			fileTool.reName(tempFile, decryptFile);
+// 		} catch (Exception e) {
+// 			throw new RuntimeException("SM4CBCDec error:"+e.getMessage());
+// 		}
+// 	}
+//
+//
+//
+// 	//CBCMAC-SM4计算
+// 	public String CBCMAC(byte[] inData){
+// 		SessionKeyContext skc = new SessionKeyContext();
+// 		skc.setKeyID(sm4keyid.getBytes());
+// 		byte[] mac = null;
+// 		byte[] paddingData = macPadding(inData);
+// 		try {
+// 			mac = crypto.SDF_CalculateMAC(skc, algo_mac, null, paddingData);
+// 		} catch (CryptoException e) {
+// 			e.printStackTrace();
+// 		}
+// 		String macValue = new String(Base64.encode(mac));
+// 		return macValue;
+// 	}
+//
+//
+// 	//Hmac计算  (测试)
+// 		public String HMAC(byte[] inData){
+// 			SessionKeyContext skc = new SessionKeyContext();
+// 			skc.setKeyID(sm4keyid.getBytes());
+// 			byte[] mac = null;
+// 			byte[] paddingData = macPadding(inData);
+// 			try {
+// 				mac = crypto.SDF_CalculateMAC(skc, algo_mac, null, paddingData);
+// 			} catch (CryptoException e) {
+// 				e.printStackTrace();
+// 			}
+// 			String macValue = new String(Base64.encode(mac));
+// 			return macValue;
+// 		}
+// 	//mac运算填充
+// 	public byte[] macPadding(byte[] inData) {
+// 		byte[] padData = {(byte)0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+// 		int remainder = inData.length%16;//余数
+// 		int padLength = 16 - remainder;
+// 		byte[] indatapad = new byte[inData.length+padLength];
+// 		System.arraycopy(inData, 0, indatapad, 0, inData.length);
+// 		System.arraycopy(padData, 0, indatapad, inData.length, padLength);
+// 		return indatapad;
+// 	}
+// 	//sm4cbc加密
+// 	public String SM4CBCEnc(byte[] inData){
+//
+// 		// 使用keyName构造key对象
+// 		SessionKeyContext skc = new SessionKeyContext();
+// 		skc.setKeyID(sm4keyid.getBytes());
+// 		byte[] inDataPadding = cbcPadding(inData);
+// 		byte[] encdata = null;
+// 		try {
+// 			encdata = crypto.SDF_Encrypt(skc, algo_cbc, null, inDataPadding);
+// 		} catch (CryptoException e) {
+// 			e.printStackTrace();
+// 		}
+// 		String encdataStr = new String(Base64.encode(encdata));
+// 		return encdataStr;
+// 	}
+// 	//sm4cbc解密
+// 	public byte[] SM4CBCDec(String encStr){
+// 		byte[] indata = Base64.decode(encStr.getBytes());
+// 		// 使用keyName构造key对象
+// 		SessionKeyContext skc = new SessionKeyContext();
+// 		skc.setKeyID(sm4keyid.getBytes());
+//
+// 		byte[] data = null;
+// 		try {
+// 			data = crypto.SDF_Decrypt(skc, algo_cbc, null, indata);
+// 		} catch (CryptoException e) {
+// 			e.printStackTrace();
+// 		}
+// 		byte[] outdata = cbcUnPadding(data);
+// 		return outdata;
+// 	}
+// 	//sm4加密数据填充
+// 	public byte[] cbcPadding(byte[] inData) {
+// 		byte[] padData = null;
+// 		int remainder = inData.length%16;//余数
+// 		int padLength = 16 - remainder;
+// 		padData = new byte[padLength];
+// 		for (int i = 0; i < padLength; i++) {
+// 			padData[i] = (byte)padLength;
+// 		}
+// 		byte[] indatapad = new byte[inData.length+padLength];
+// 		System.arraycopy(inData, 0, indatapad, 0, inData.length);
+// 		System.arraycopy(padData, 0, indatapad, inData.length, padLength);
+// 		return indatapad;
+// 	}
+// 	//sm4解密数据去填充
+// 	public byte[] cbcUnPadding(byte[] inData) {
+// 		byte[] outData = null;
+// 		int outDataLength = 0;
+// 		int padLength = (int)inData[inData.length-1];//余数
+// 		if (padLength>16||padLength<1) {
+// 			throw new RuntimeException("cbcUnPadding error,Data error");
+// 		}
+// 		outDataLength = inData.length-padLength;
+// 		outData = new byte[outDataLength];
+// 		System.arraycopy(inData, 0, outData, 0, outDataLength);
+// 		return outData;
+// 	}
+// 	//SM2数字签名
+// 	public String sm2Sign(byte[] inData) {
+// 		byte[] hash = null;
+// 		byte[] signValue = null;
+// 		SM2refPublicKey refPublicKey = null;
+// 		try {
+// 			refPublicKey =crypto.SDF_ExportPublicKey_ECC(sm2Keyid);
+// 			Object hashContext = null;
+// 			hashContext = crypto.SDF_HashInit(algo_hash, refPublicKey, "1234567812345678".getBytes());//算法为SM3时,第二个参数签名者公钥对象有效
+// 			crypto.SDF_HashUpdate(hashContext, inData);
+// 			hash = crypto.SDF_HashFinal(hashContext,null);
+// 			SM2refSignature sm2signValue = crypto.SDF_InternalSign_ECC(sm2Keyid,hash);
+// 			signValue = sm2signValue.encode();
+// 		} catch (CryptoException e) {
+// 			throw new RuntimeException("sm2Sign error:"+e.getMessage());
+// 		}
+// 		return new String(Base64.encode(signValue));
+// 	}
+//
+// 	private byte[] getPubkeyByCert(String certStr) {
+// 		X509Certificate cert = null;
+// 		byte[] certByte = Base64.decode(certStr);
+// 		InputStream stream = new ByteArrayInputStream(certByte);
+//
+// 		CertificateFactory factory = null;
+// 		try {
+// 			factory = CertificateFactory.getInstance("X.509", "SwxaJCE");
+// 			cert = (X509Certificate) factory.generateCertificate(stream);
+// 		} catch (CancellationException e) {
+// 			System.out.println("解析证书失败" + e.getMessage());
+// 			e.printStackTrace();
+// 		} catch (Exception e) {
+// 			e.printStackTrace();
+// 		}
+// 		JCESM2PublicKey pubKey = (JCESM2PublicKey)cert.getPublicKey();
+// 		byte[] pubkey = new byte[132];
+// 		for (int i = 0; i < pubkey.length; i++) {
+// 			pubkey[i]= 0x00;
+// 		}
+// 		pubkey[1] = 0x01;
+// 		System.arraycopy(BigIntegerUitl.asUnsigned32ByteArray(pubKey.getW().getAffineX()),0,pubkey,36,32);
+// 		System.arraycopy(BigIntegerUitl.asUnsigned32ByteArray(pubKey.getW().getAffineY()),0,pubkey,100,32);
+// 		return pubkey;
+// 	}
+//
+// 	public String getSerialNumberByCert(String certStr) {
+// 		X509Certificate cert = null;
+// 		byte[] certByte = Base64.decode(certStr);
+// 		InputStream stream = new ByteArrayInputStream(certByte);
+//
+// 		CertificateFactory factory = null;
+// 		try {
+// 			factory = CertificateFactory.getInstance("X.509", "SwxaJCE");
+// 			cert = (X509Certificate) factory.generateCertificate(stream);
+// 		} catch (CancellationException e) {
+// 			System.out.println("解析证书失败" + e.getMessage());
+// 			e.printStackTrace();
+// 		} catch (Exception e) {
+// 			e.printStackTrace();
+// 		}
+// 		String serialNumber = cert.getSerialNumber().toString(16);
+// 		return serialNumber;
+// 	}
+//
+// 	private byte[] signValueDerToGm(byte[] derSignvalue) {
+// 		byte[] gm = new byte[128];
+// 		byte[] r = new byte[32];
+// 		byte[] s = new byte[32];
+// 		int p = 0;
+// 		if (derSignvalue[p]==0x30) {
+// 			p=p+2;
+// 			if (derSignvalue[p]==0x02) {
+// 				p = p+1;
+// 				if (derSignvalue[p]==0x20) {
+// 					p = p+1;
+// 					System.arraycopy(derSignvalue, p, r,0,32);
+// 					p = p+32;
+// 					if (derSignvalue[p]==0x02) {
+// 						p = p+1;
+// 						if (derSignvalue[p]==0x20) {
+// 							p = p+1;
+// 							System.arraycopy(derSignvalue, p, s,0,32);
+// 						}else if (derSignvalue[p]==0x21) {
+// 							p = p+2;
+// 							System.arraycopy(derSignvalue, p, s,0,32);
+// 						}else {
+// 							throw new RuntimeException("signValueDerToGm error");
+// 						}
+// 					}else {
+// 						throw new RuntimeException("signValueDerToGm error");
+// 					}
+// 				}else if (derSignvalue[p]==0x21) {
+// 					p = p+2;
+// 					System.arraycopy(derSignvalue, p, r,0,32);
+// 					p = p+32;
+// 					if (derSignvalue[p]==0x02) {
+// 						p = p+1;
+// 						if (derSignvalue[p]==0x20) {
+// 							p = p+1;
+// 							System.arraycopy(derSignvalue, p, s,0,32);
+// 						}else if (derSignvalue[p]==0x21) {
+// 							p = p+2;
+// 							System.arraycopy(derSignvalue, p, s,0,32);
+// 						}else {
+// 							throw new RuntimeException("signValueDerToGm error");
+// 						}
+// 					}else {
+// 						throw new RuntimeException("signValueDerToGm error");
+// 					}
+// 				}
+// 			}else {
+// 				throw new RuntimeException("signValueDerToGm error");
+// 			}
+// 		}else {
+// 			throw new RuntimeException("signValueDerToGm error");
+// 		}
+// 		for (int i = 0; i < gm.length; i++) {
+// 			gm[i]=0x00;
+// 		}
+//
+// 		System.arraycopy(r, 0,gm,32,32);
+// 		System.arraycopy(s, 0,gm,96,32);
+//
+//
+// 		return gm;
+// 	}
+//
+// 	//SM2数字验签
+// 	public boolean sm2VerByCert(byte[] inData,String signValue,String certStr ) {
+// 		boolean result = false;
+// 		byte[] hash = null;
+// 		byte signValueOne = signValue.getBytes()[0];
+// 		byte[] signValueByte = null;
+// 		if (signValueOne=='M') {
+// 			//将der转换成GM
+// 			signValueByte = signValueDerToGm(Base64.decode(signValue));
+// 		}else {
+// 			signValueByte = Base64.decode(signValue.getBytes());
+// 		}
+// 		byte[] pubkey = getPubkeyByCert(certStr);
+// 		SM2refSignature sm2refSignature = new SM2refSignature();
+// 		SM2refPublicKey refPublicKey = new SM2refPublicKey();
+// 		try {
+// 			refPublicKey.decode(pubkey);
+// 			sm2refSignature.decode(signValueByte);
+// 			Object hashContext = null;
+// 			hashContext = crypto.SDF_HashInit(algo_hash, refPublicKey, "1234567812345678".getBytes());//算法为SM3时,第二个参数签名者公钥对象有效
+// 			crypto.SDF_HashUpdate(hashContext, inData);
+// 			hash = crypto.SDF_HashFinal(hashContext,null);
+// 			result = crypto.SDF_ExternalVerify_ECC(refPublicKey, hash,sm2refSignature);
+// 			result = true;
+// 		} catch (CryptoException e) {
+// 			System.out.println("sm2Ver error:"+e.getMessage());
+// 			result = false;
+// 		}
+// 		return result;
+// 	}
+//
+// 	//SM2数字验签
+// 	public boolean sm2Ver(byte[] inData,String signValue,String publickey ) {
+// 		boolean result = false;
+// 		byte[] hash = null;
+// 		byte[] signValueByte = Base64.decode(signValue.getBytes());
+// 		byte[] pubkeyByte = Base64.decode(publickey.getBytes());
+// 		SM2refSignature sm2refSignature = new SM2refSignature();
+// 		SM2refPublicKey refPublicKey = new SM2refPublicKey();
+// 		try {
+// 			refPublicKey.decode(pubkeyByte);
+// 			sm2refSignature.decode(signValueByte);
+// 			Object hashContext = null;
+// 			hashContext = crypto.SDF_HashInit(algo_hash, refPublicKey, "1234567812345678".getBytes());//算法为SM3时,第二个参数签名者公钥对象有效
+// 			crypto.SDF_HashUpdate(hashContext, inData);
+// 			hash = crypto.SDF_HashFinal(hashContext,null);
+// 			result = crypto.SDF_ExternalVerify_ECC(refPublicKey, hash,sm2refSignature);
+// 		} catch (CryptoException e) {
+// 			throw new RuntimeException("sm2Ver error:"+e.getMessage());
+// 		}
+// 		return result;
+// 	}
+// 	public boolean sm2SignVer() throws UnsupportedEncodingException {
+// 		byte[] inData = "修改某条业务数据xxx为yyy".getBytes("utf-8");
+// 		boolean result = false;
+// 		byte[] hash = null;
+// 		byte[] signValueByte = null; //= Base64.decode(signValue.getBytes());
+// 		byte[] pubkeyByte = null;//= Base64.decode(publickey.getBytes());
+// 		SM2refSignature sm2refSignature = new SM2refSignature();
+// 		SM2refPublicKey refPublicKey = new SM2refPublicKey();
+// 		try {
+// 			refPublicKey = crypto.SDF_ExportPublicKey_ECC(sm2Keyid);
+// 			Object hashContext = null;
+// 			hashContext = crypto.SDF_HashInit(algo_hash, refPublicKey, "1234567812345678".getBytes());//算法为SM3时,第二个参数签名者公钥对象有效
+// 			crypto.SDF_HashUpdate(hashContext, inData);
+// 			hash = crypto.SDF_HashFinal(hashContext,null);
+//
+// 			sm2refSignature = crypto.SDF_InternalSign_ECC(sm2Keyid, hash);
+// 			System.out.println(new String(Base64.encode(refPublicKey.encode())));
+// 			System.out.println(new String(Base64.encode(sm2refSignature.encode())));
+// 			result = crypto.SDF_ExternalVerify_ECC(refPublicKey, hash,sm2refSignature);
+// 		} catch (CryptoException e) {
+// 			throw new RuntimeException("sm2Ver error:"+e.getMessage());
+// 		}
+// 		System.out.println("sm2SignVer 成功");
+// 		return result;
+// 	}
+// 	public String getSm2PublicKey() {
+// 		SM2refPublicKey refPublicKey = null;
+// 		try {
+// 			refPublicKey =crypto.SDF_ExportPublicKey_ECC(sm2Keyid);
+// 		} catch (CryptoException e) {
+// 			throw new RuntimeException("getSm2PublicKey error:"+e.getMessage());
+// 		}
+// 		return new String(Base64.encode(refPublicKey.encode()));
+// 	}
+//
+// }