`

通过加密判断越权

 
阅读更多
package com.sf.sms.util.utils;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
* <pre>
* Base64 加解密
* </pre>
* @author 730882
* @version 1.0, 2013-7-22
*/
public class Base64Coder {

private final static String CODING = "UTF-8";
private final static String KEY_MODUL = "DES";
private final static String KEY_SECRET = "DES/ECB/PKCS5Padding";
private final static String[][] REPLACE_CHAR = new String[][]{{"+","*"},{"/","-"},{"=","_"}};

//采用DES算法进行加密,返回加密结果的Base64编码字符串,密码模式为ECB
public static String encrypt(String message, String key) throws Exception {
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(CODING));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_MODUL);  
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
//IvParameterSpec iv = new IvParameterSpec("".getBytes(CODING));

Cipher cipher = Cipher.getInstance(KEY_SECRET);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] bytes = cipher.doFinal(message.getBytes(CODING));
return encryptBase64(bytes);
}

//采用DES算法进行解密,返回加密之前的原文,密码模式为ECB
public static String decrypt(String message, String key) throws Exception {
    byte[] bytesrc = decryptBase64(message);     
    DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(CODING));     
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_MODUL);     
    SecretKey secretKey = keyFactory.generateSecret(desKeySpec);     
      //IvParameterSpec iv = new IvParameterSpec(key.getBytes(CODING));  
   
    Cipher cipher = Cipher.getInstance(KEY_SECRET);
    cipher.init(Cipher.DECRYPT_MODE, secretKey);        
  
    byte[] retByte = cipher.doFinal(bytesrc);     
    return new String(retByte, CODING);
}

//替换加解密特殊字符
private static String encryptReplace(String str,boolean type) {
if(str == null) return str;
int i=0,j=1;
if(!type){
i=1;
j=0;
}
for(String[] sArr : REPLACE_CHAR){
str = str.replace(sArr[i], sArr[j]);
}
return str.replaceAll("\\r\\n","").replaceAll("\\n", "");
}

private static String encryptBase64(byte[] b) throws Exception {
        return encryptReplace(new BASE64Encoder().encodeBuffer(b), true);
}

private static byte[] decryptBase64(String s) throws Exception {
    return new BASE64Decoder().decodeBuffer(encryptReplace(s, false));
  }

}






package com.sf.sms.controller.schedule;

import java.util.List;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.sf.erui.common.exception.SfopenRuntimeException;
import com.sf.sms.ReadResourceFile;
import com.sf.sms.constant.ScheduleConstant;
import com.sf.sms.domain.config.Config;
import com.sf.sms.service.config.ConfigService;
import com.sf.sms.service.system.SysUserService;
import com.sf.sms.util.utils.Base64Coder;


@Component
public class ScheduleUtil {

private static final Logger logger = LoggerFactory.getLogger(ScheduleUtil.class);


@Resource
private SysUserService sysUserService;

@Resource
private ConfigService configService;

private static String key = ReadResourceFile.getConfigurationInfoByKey(ScheduleConstant.SMS_USER_RIGHT_KEY);
/**
* 加密对比
* @params ScheduleUtil.java
* @method isOk
* @param message
* @param userCode
* @return
* @throws Exception
*/
public static boolean isOk(String message,String userCode) throws Exception{

if(key == null){
throw new SfopenRuntimeException(" 没有配置地址: sms_user_right_key");
}

String keyValueToM = Base64Coder.decrypt(userCode,key);
return keyValueToM.equals(message);

}




/**
*
* @params ScheduleUtil.java
* @method isOk
* @param message 密文
* @param userCode 铭文 用户工号
* @param sysUserCode 系统用户工号
* @return
* @throws Exception
*/
public static boolean isOk(String message,String userCode,String sysUserCode) throws Exception{
if(key == null){
throw new SfopenRuntimeException(" 没有配置地址: sms_user_right_key");
}
String deKey = sysUserCode + key;
String keyValueToM = Base64Coder.encrypt(userCode,deKey);
return keyValueToM.equals(message);
}

/**
* 获取加密后的用户
* @params ScheduleUtil.java
* @method decryptCode
* @param message
* @return userCode 铭文 用户工号
* @throws Exception
*/
public static String decryptCode(String message) throws Exception{
if(key == null){
throw new SfopenRuntimeException(" 没有配置地址: sms_user_right_key");
}
String userCode = Base64Coder.decrypt(message,key);
logger.info("decryptCode userCode:"+userCode);
return userCode;
}


/**
* 加密用户工号
* @params ScheduleUtil.java
* @method encryptCode
* @param userCode 铭文用户名
* @param key
* @return 返回密文
* @throws Exception
*/
public static String encryptCode(String userCode) throws Exception{
if(key == null){
throw new SfopenRuntimeException(" 没有配置地址: sms_user_right_key");
}
String message = Base64Coder.encrypt(userCode,key);
logger.info("encryptCode message:"+message);
return message;
}


/**
* 获取加密后的用户 登陆用户加密动态
* @params ScheduleUtil.java
* @method decryptCodes
* @param message
* @param sysUserCode
* @return userCode 铭文 用户工号
* @throws Exception
*/
public static String decryptCodes(String message,String sysUserCode) throws Exception{
if(key == null){
throw new SfopenRuntimeException(" 没有配置地址: sms_user_right_key");
}
String deKey = sysUserCode + key;
String userCode = Base64Coder.decrypt(message,deKey);
logger.info("decryptCode userCode:"+userCode);
return userCode;
}


/**
* 加密用户工号
* @params ScheduleUtil.java
* @method encryptCode
* @param userCode 铭文用户名
* @param sysUserCode 动态用户加密
* @param key
* @return message 返回密文
* @throws Exception
*/
public static String encryptCodeBySysCode(String userCode,String sysUserCode) throws Exception{
if(key == null){
throw new SfopenRuntimeException(" 没有配置地址: sms_user_right_key");
}
String deKey = sysUserCode + key;
String message = Base64Coder.encrypt(userCode,deKey);
logger.info("encryptCode message:"+message);
return message;
}



}



@RequestMapping("/getUserData")
@ResponseBody
public Response getScheduleRigthDate(@RequestBody ScheduleRightUser command) throws Exception {
boolean isUser = false;
String rightUser = command.getUserCode();// 权限下属用户
String loginUser = UserContext.getCurrentUserName();// 当前登录用户
String userMessage = command.getUserMessage();
isUser = ScheduleUtil.isOk(userMessage, rightUser, loginUser);
// 判断传入进来的当前登录工号是否为当前登录工号
if (!isUser) {
return ResponseUtil.buildFail("传入的登录工号参数与当前登录系统中的工号不匹配");
}
Date sdate = new Date(command.getStartDate());
Date edate = new Date(command.getEndDate());
Map<String, Object> dataMap = new HashMap<>();
List<ScheduleTaskDTO> scheduleTaskDTOs = new ArrayList<>();
List<MeetingDto> meetingDtos = new ArrayList<>();

if ("M".equals(command.getType()) || "A".equals(command.getType())) {
List<Meeting> meetings = meetingService.getMeeting(rightUser, sdate, edate, Optional.ofNullable(null), null);
meetingDtos = meetings.stream().filter(it -> {
if ("Y".endsWith(it.getDraftFlag()) && !loginUser.equals(it.getCreatorWorknumber())) {
return false;
}
return true;
}).map(meetingTransform).map(it -> {
if ("Y".equals(it.getCycleSign())) {
CycleInfo cycleInfo = cycleInfoService.getCycleInfoByMeetingId(Long.valueOf(it.getMeetingId()));
CycleInfoDto cycleInfoDto = new CycleInfoDto();
cycleInfoDto.setCycleId(cycleInfo.getId());
cycleInfoDto.setCycleLength(Long.parseLong(cycleInfo.getCycleLength()));
cycleInfoDto.setCycleType(cycleInfo.getCycleType());
cycleInfoDto.setCreatorWorkernumber(cycleInfo.getCreatorAccount());
it.setCycleInfo(cycleInfoDto);
}
return it;
}).map(it -> {
if ("Y".equals(it.getDraftFlag())) {
it.setMeetingName("[草稿]" + it.getMeetingName());
} else {
if ("Y".equals(it.getCycleSign())) {
it.setMeetingName("[周期]" + it.getMeetingName());
}
}
return it;
}).collect(toList());

}
if ("T".equals(command.getType()) || "A".equals(command.getType())) {

scheduleTaskDTOs = taskService.getAllTasksByStartDateAndEndDate(rightUser, sdate, edate).stream().map(ScheduleTaskDTO::buildByTaskDetail).collect(toList());
}
dataMap.put(MEETING_DATAS, meetingDtos);
dataMap.put(TASK_DATAS, scheduleTaskDTOs);
dataMap.put(UPDATE_TIME, (new Date().getTime()));
return ResponseUtil.buildOK(dataMap);
}

分享到:
评论

相关推荐

    administer.rar_administer_labview_labview 用户_labview判断_labview管理

    例如,密码通常需要加密存储,用户权限应按照角色进行分配,避免越权操作。 10. **程序测试与调试**: LabVIEW支持单元测试和集成测试,开发者可以创建测试用例来验证用户管理功能的正确性。此外,使用调试工具如...

    04-企业级未授权访问漏洞防御实践1

    - **流量监控**:通过安装流量监控系统,检测并阻止异常请求,但要注意,即使加密的参数也可能因监控而泄露。 ### 6. 先进的防御思路 - **流量混淆与加密**:通过nginx代理,对HTTP流量进行重写和混淆加密,使得...

    2018 年(第四届)全国网络空间安全大赛 线上赛解题报告

    - **时间盲注**:SQL注入的一种,通过控制注入的时间差来判断条件是否成立。 ### Web题0x05Web4 考点包括: - **跨站WebSocket劫持**:攻击者通过技术手段劫持其他用户发起的WebSocket连接。 - **Golang语言**:...

    时代亿信 文件共享访问控制网关

    - **技术原理**:通过对SMB/CIFS协议的数据包进行分析,判断用户访问行为是否符合预先设定的权限列表。 - **安全性**:能够更精确地控制文件访问权限,满足更高的安全管理需求。 - **实时监控**:文件共享访问...

    1.天翼创维awifi路由器存在多处未授权访问漏洞1

    在未提供正确用户名和密码的情况下,通过查看网页源代码,攻击者发现了一个名为`clback`的函数,该函数仅基于返回包的返回值来判断登录状态。这意味着攻击者可以通过篡改返回包的特定字段,如将返回值从0改为1,来...

    银行票据电子化管理系统

    查询时需要操作员的登录,通过提供操作员号、被查询行、密码进行登录,根据其权限进行判断并记录日志;通过系统的权限检查后,可以进行票据影像的查询和打印。查询条件包括:日期范围,支行代号、帐号、金额、借贷...

    网络安全论文:浅谈办公网络安全——病毒防治.doc

    使用人员根据自己的职责 权限,选择不同的口令,对应用程序数据进行合法操作,防止用户越权访问数据和使用 网络资源。对办公网络使用人员明确病毒的危害,文件共享的时候尽量控制权限和增加 密码,对来历不明的文件...

    计算机网络安全管理与有效运行.pdf

    特别是对于未成年人等缺乏判断力的用户群体,更容易成为网络诈骗和不法分子的攻击目标。 隐私泄露问题的严重性不容忽视。用户在使用互联网服务时,会产生大量的个人信息,包括位置信息、消费信息、通信信息、支付...

    oracle数据库系统加固规范

    - **回退方案**: 如果加密导致性能下降,可适当调整加密级别。 - **判断依据**: 确认通信协议符合安全标准。 - **实施风险**: 中 - **重要等级**: ★★★ #### 四、设备其他安全要求 这部分文档没有给出具体细节,...

    数据库系统安全性分析与实现.docx

    (2)完整性:防止非法用户对数据进行添加、修改和删除,同时也防止合法用户越权访问对未被授权的数据进行添加、修改和删除,并且能够判断数据是否被修改。 数据库系统安全性分析与实现全文共3页,当前为第2页。...

    关系数据库中SQL Server 2016与Oracle 18安全性机制对比分析.pdf

    数据加密是保障数据库安全的重要措施,通过算法将数据转换为密文,以防止非授权访问。用户认证确保只有授权用户才能访问数据库资源,常用的认证方式包括口令认证、生物特征认证等。权限控制涉及到对不同用户授予不同...

    数据库审计+防统方+堡垒主机.pptx

    数据库审计系统是数据库安全的重要组成部分,它可以监视对数据库的各类操作及返回信息,并可以根据设置的规则,智能判断出各种风险行为,并对违规操作进行报警,有效弥补了现有应用系统在数据库安全使用上的不足,为...

    深圳朗天银行系统运维监控平台

    2. **危险操作行为警示**:内置规则引擎允许用户自定义警示规则,对可能的异常操作进行实时报警,管理人员能迅速查看操作现场,判断是否为违规行为。 3. **高危操作行为拦截**:对于极高风险的操作,系统可自动拦截...

    微博存在参加过期活动.docx

    例如,活动的开始和结束时间的判断可能不严谨,或者用户输入的时间数据没有得到有效的验证。在这种情况下,恶意用户可以利用这些疏漏,通过篡改请求参数或者利用时区差异等手段,使得系统误认为当前时间仍在活动的...

    ThinkPHP(RBAC)权限管理系统_第2讲_数据表分析

    - 访问控制:根据用户的角色,判断用户是否有权限执行特定操作。 5. 性能优化: 在大型系统中,权限检查通常是频繁的操作。因此,我们可能需要设计缓存策略,如使用Redis或Memcached缓存用户的角色和权限,减少...

    登陆界面与权限管理.zip_权限_登陆界面与权限管理

    2. 登录模块负责验证用户身份,权限模块则处理用户访问权限的判断和控制。 3. 通过接口或服务调用,其他业务模块可以轻松地集成登录和权限检查功能。 文件“登陆界面与权限管理”可能包含了实现这些功能的源代码、...

    RBAC 权限管理系统后端-egg-rbac-server.zip

    在实现RBAC系统时,还需考虑安全性问题,如权限分配的审核流程、防止越权操作、密码加密存储、API接口的安全防护(如CSRF、XSS防护)等。 通过以上分析,我们可以看出“egg-rbac-server”项目是一个集成了RBAC权限...

    《暗战亮剑-软件漏洞发掘与安全防范实战》┊王继刚[.PDF]

    第1章 无法摆脱的漏洞1.1 软件漏洞的概念1.2 软件漏洞的分类1.2.1 缓冲区溢出漏洞1.2.2 整数溢出漏洞1.2.3 格式化字符串漏洞1.2.4 指针覆盖漏洞1.2.5 SQL注入漏洞1.2.6 Bypass漏洞1.2.7 信息泄露漏洞1.2.8 越权型...

    SQL Server 数据库系统加固规范

    - **加密通信:** 对敏感数据传输进行加密处理,比如使用SSL/TLS协议。 #### 四、设备其他安全要求 这部分文档简略提及了一些其他的设备安全要求,常见的安全措施包括: - **定期更新补丁:** 安装最新的安全补丁和...

Global site tag (gtag.js) - Google Analytics