vue 使用MD5加密

概念 MD5是一种信息摘要算法(对称加密),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值,用来确保信息传输完整一致性。它可以计算任意长度的输入字符串,得到固定长度的输出,而且这个算法是不可逆的,即使得到了加密的密文,也不可能用解密算法反算出明文。 vue 安装 npm install --save js-md5 全局 定义: import md5 from 'js-md5'; Vue.prototype.$md5 = md5; 全局使用: this.$md5('MD5加密') 局部 定义: import md5 from 'js-md5' 局部使用: md5('md5加密') 案例 因为MD5加密常用在密码加密中,就暂时不需要全局定义,两种方式都列出。 import { postRequest } from '@/utils/http' import emptyUtil from '@/utils/emptyUtil' import store from '@/store/index' // 局部MD5引用 import md5 from 'js-md5' /** *@Description: 登录API *@MethodAuthor: lanys *@Date: 2022-06-23 11:52:42 *@version: 1.0 */ export default { /** 登录api */ async login (params) { // MD5加密 params.

行内代码

行内代码\n 行内代码的格式很简单,只需要使用两个 ` 将代码内容包裹起来即可,比如 var foo = \'bar\'; \n 缩进显示代码\n 要在 Markdown 中创建代码块也很简单,只要简单地缩排 4 个空白或是 1 个 tab 就可以,例如,下面的输入: \n 这是一个普通的段落: \n This is a code block.\n\n 在 Markdown 会转换成: \n ```html \n 这是一个普通的段落: \n\n This is a code block.\n\n ``` \n 这个每行一级的缩排(4 个空白或是 1 个 tab),都会被移除,例如: \n 这里是一段示例代码: \n tell application "Foo"\n beep\nend tell\n\n 会被转换为: \n ```html \n 这里是一段示例代码: \n\n tell application "Foo"\n beep\nend tell\n\n ``` \n 一个代码块会一直持续到没有缩排的那一行(或是文档结尾)。

Django学习

Django学习 文章共计26个章节 文章目录 Django学习文章共计26个章节 第一章 Django介绍和相关术语一、Django介绍1.简介2.安装3.文档 二、Django相关知识学习1.Django结构2.相关术语和规范 第二章 项目搭建一、Django构建项目1、cmd命令行构建项目2、pycharm构建项目 第三章 Django配置一、django配置1、整体介绍2、应用settings文件3、常用配置项4、程序中获取settings中的配置项 第四章 URLConf调度器一、URL调度器1、工作原理2、简单示例3、路径转换器4、自定义路径转换器5、使用正则表达式6、使用默认值7、错误处理8、引用其他URL调度器9、额外的参数10、URL反向解析11、命名空间 第一章 Django介绍和相关术语 一、Django介绍 1.简介 Django是Python语言中的一个web框架,Python语言中主流的web框架有Django、Tornado、Flask等多种。Django相较与其他web框架,其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等功能,是一个全能型框架,拥有自己的Admin数据管理后台,第三方工具齐全,性能折中。缺点:功能太多,数据分表复杂,高性能扩展复杂。 2.安装 1.pip安装:在cmd命令窗口中,输入: pip install django 2.pycharm安装:在file>>settings>>project>>project interpreter 中搜索django,进行安装。 3.下载安装包安装:在官网https://www.djangoproject.com/download/ , 下载 django-master.tar,解压后,在解压目录中 运行 cmd(或者在cmd中切换到解压目录),然后通过输入命令: python setup.py install 3.文档 官方文档的链接在:https://docs.djangoproject.com/en/2.2/, 点击页面右下角的language按钮,可以选择zh-hans,显示中文,只有部分页面有中文翻译,点击页面右下角的Documentation version,可以选择版本。 二、Django相关知识学习 1.Django结构 2.相关术语和规范 1.B/S 和C/S Django是用于开发B/S架构的软件的,软件主要分为B/S架构和C/S架构: B/S:全称Browser/Server(浏览器/服务器) C/S:全称Client/Server(客户端/服务器) 2.MVC MVC全名是Model View Controller,是模型(Model)—视图(View)—控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 M:管理应用程序的状态(通常存储到数据库中),并约束改变状态的行为,(或者叫做“业务规则”)V:负责把数据格式化后呈现给用户C:接受外部用户的操作,根据操作访问模型获取数据,并调用视图显示这些数据,控制器是将模型和视图隔离,并成为二者之间的联系纽带。 3.MTV Django也是一个MVC框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式: M: 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 T: 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 V: 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。

Shamir秘密共享机制(加法、乘法共享)Matlab可视化实现

具体秘密共享的流程可以参考下面这个链接的内容:https://blog.csdn.net/Matrix_element/article/details/117357359 main1.m 加法方案的主函数:确认门限(代码里(5,3))以及对应的两个多项式(代码对应的多项式是y1 = 2 * x ^ 2 - 3 * x + 4, y2 = x ^ 2 + 5 x - 6,所以通过多项式分发给每个人两个值,最后通过3个人的子秘密和恢复出4 + -6 = - 2)-> 给每个人分发子秘密值 -> 通过3个人的子秘密值和使用拉格朗日恢复出-2(两个多项式的常数项和) %%%加法方案 %%分发 % 首先确定方案门限值 a = [5,3]; % 输入多项式的参数,生成每个人相应的密钥 % coef1 = [2,-3,4; % 1,5,-6];%自己定义多项式系数矩阵 coef1 = ceil(rand(2,a(2))*10)%随机生成多项式系数矩阵 s = Sharing(a, coef1); add_s = sum(s,2); %%恢复 %P = [1,3,5]; P = [1,add_s(1); 3,add_s(3); 5,add_s(5)]; y = Recover(a,P) % %恢复加法秘密值 % ab=0; % ab = add_s(1) * ( (0-P(2)) * (0-P(3)) ) / ( (P(1)-P(2)) * (P(1)-P(3)) ) + .

曾经如日中天的VB编程,现已没落,而惨遭嫌弃的它,成了香饽饽

说到VB编程,一股莫名的亲切感,总会油然而生。 它,也算是承载了一代人的青春。 可以说,2000年前后,Visual Basic这个编程工具,也就是我们常说的VB,简直是火爆全网啊! 但,令人遗憾的是,曾经如日中天的VB编程,现今使用人数却门可罗雀,已冷落到被淘汰的边缘。 此情此景,难免令人嘘唏! 众所周知,VB是微软推出来的一个可视化编程语言,它主要针对的是,Windows操作系统的32位主机。 1991年,Visual Basic 1.0诞生,当时只有英文版这个版本,接下来几年,先后推出了Visual Basic 2.0到Visual Basic 5.0等几个版本。 而我们现在常用的版本,为Visual Basic 6.0,即VB的巅峰版本,这是在1998年秋季,经过完善和功能扩充,而形成的。 Visual Basic 6.0 这个版本,由3个分身组成:企业版、专业版和学习版。 尤其是企业版VB,在创建自定义控件,以及对网络编程的开发和对数据库的访问上,都有了进一步的加强、完善和提高。 只不过,后来伴随着Java语言的崛起,VB终究还是在这场编程语言的博弈中,占了下风。 正如你所见,Java语言有一个很明显的特点,它不仅可视化,还能跨平台,不受操作系统的影响,同时这也是Java语言能够迅速崛起的原因。 关于VB语言的没落,其实还有一个很重要的说辞。 大家都知道,我们用VB编写的软件,一般是CS架构,而用Java编写的软件,为BS架构,随着互联网的推动,很多这种CS架构,都被没落了,也就是说,软件架构从CS架构转化成了BS架构。 虽然,现在VB还能用,但微软公司没有再去更新它的版本了,VB的编程工序,也就搁浅了下来。 因此,除了维护老系统,基本上没人会动VB这个“老古董”,可视化编程,我们可选的工具太多了,何必再去碰这个,不能跨系统跨平台操作的VB编程呢? 那,岂不是自找麻烦嘛! 与曾经如日中天,现已黯然退场的VB不同,互联网的历史长河中,有一个同样耀眼的可视化编程工具存在。 它,起初惨遭嫌弃,鲜有人问津,如今却一夜爆红,成为了企业数字化转型的香饽饽。 西门子 2018年,德国西门子以7亿美元重金收购Mendix,一炮打响了低/无代码开发领域的知名度。 于是乎,一系列诸如简道云,轻流,白码等,国产知名低/无代码开发平台,应运而生。 其中,以原金山系WPS创业团队所研发的国产无代码开发平台——云表企业应用平台,表现最为亮眼。 云南小松机械工程ERP 这是一款内嵌了MySQL数据库,基于Java语言编写的可视化无代码编程工具。 它在企业数字化转型道路上,起到了至关重要的“降本增效”作用。 以来企业购买标准软件回来,系统臃肿,功能通用,不能按需增删改查系统功能,别说个性化管理了,一旦企业业务发生变更,这套软件基本上算是报废了,你还得重新花钱去购买新的软件,耗财耗力,得不偿失。 而云表平台则不一样,在它这里,所有的管理软件,不仅与时俱进,而且还可以构成“All in One”体系。 毫不夸张地说,云表平台已经完全摆脱了代码的束缚,使用它,你不用写一行代码,通过类似excel的可视化拖拉拽操作,配置中文文本信息,平均1-2周的时间,即可快速开发和上线一套功能完备的管理软件,如PLM、SRM、MES,WMS和进销存等等。 销售管理驾驶舱 并且,各系统之间,数据互通,信息共享。 任何时候,只要你觉得系统功能过时了,随时可推倒重建,软件更新迭代,永不过时。 云表平台不仅完全支持二次开发,而且还解决了以往excel在企业信息化建设中,数据难以联动,UI交互割裂,权限流程难以设置的痛点难题。 除此之外,它还开放了API接口,对接企业微信,SAP,PDA,高拍仪,电子秤等第三方软硬件,丝毫不存在任何压力。 一端开发,即可三端应用:PC端,app端和H5端。 当然,像消息推送,自动编码,蓝牙打印,批量导入,多人协同等各种精细化的业务场景功能,它也是支持的。 你可以选择本地部署,云端部署,以及混合部署等多种部署方式,并7分钟生成可视化大屏。 可视化大屏 时至今日,云表平台已俨然成为企业数字化转型的标准配套装备。 像华为,恒逸石化,中冶,中铁,中国电信,北京航天,许继电气,汾西矿业,香港建滔,云南小松,燕山大学等近20万+的企事业单位或机构,早已开始在内部对它进行深度部署和应用。 小结 VB编程的没落,也许是命途使然。 这个道理,同样可以放到低/无代码可视化编程工具的崛起上。 要想与时俱进,不仅要求我们具备审时度势的尖锐目光,还要求我们必须保持信仰,不忘初心。 PS:“免费下载”,主页更精彩。 文|Mondy 标签:软件 架构 可视化编程 VB

C语言编写程序,从键盘输入三角形的三条边,判断它们是否能构成等腰或直角三角形。

编写程序,从键盘输入三角形的3条边a、b、c, 判断它们是否能构成等腰或直角三角形,如果能,则输出yes,如果不能,则输出NO。 实验代码: #include <stdio.h> int main() { float a,b,c; printf("输入三角形的三边:"); scanf("%f%f%f",&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a) if((a*a==b*b+c*c)||(b*b==a*a+c*c)||(c*c==a*a+b*b)) printf("yes\n"); else if(a==b||a==c||b==c) { printf("yes\n"); } else { printf("NO\n"); } else {printf("NO\n"); } return 0; } 运行结果: 注意! 构成三角形三边成立条件,就是其两两长度都大于第三边,即: if(a+b>c&&a+c>b&&b+c>a)

wsl2安装出现问题,可以下载ubuntu,但是启动出现0x800704cf问题

gtihub上的项目很多是在linux环境中运行的,并且对于开发者而言,linux系统也更加友善。 安装wsl的原因,是因为虚拟机VMware实际上是无法识别到你机器的硬件设备,所以在我安装完anconda之后,发现无法找到cuda进行安装。 wsl是windows开发的基于linux内核的虚拟机,支持在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层,可以识别相应的硬件。 而我在安装中遇到一个问题,当我安装完ubuntu20.04之后,启动ubuntu的时候,总是出现0x800704cf的问题。我怀疑是安装的VMware的网络适配器和wsl安装的ubuntu的网络出现了问题,造成wsl的ubuntu无法与windows 的网络进行连接,所以记录一下,解决办法: > 在win10的powershell上,使用管理员命令运行如下命令: > > 1. netsh winsock reset > 2. netsh int ip reset all > 3. netsh winhttp reset > 4. proxy ipconfig /flushdns

权限解决方案:Shiro自定义Permission、AOP + Shiro

标题 一、说明二、spring-shiro如何实例化并执行对应的permission?1. 核心想法&思路问题一问题二问题三问题四 2. 具体解读(1)初始化PermissionResolver(2) 实例化并执行permission(3) shiro是如何处理permission返回的结果?[1] 继承关系SecurityManager[2] 逻辑终结 三、ModularRealmAuthorizer继承图 四、WildcardPermission对比规则五、基于业务自定义permission & 重写AuthorizerRealm的isPermitted(重点)思路说明自定义Permission & AuthorizingRealm实现AuthorizerRealm,重写isPermitted(重要)shiro配置aop切入 六、衍生问题 一、说明 二、三、四都是推导过程,结论在五,可以直接应用。 主要有两点: 自定义PermissionAOP + Shiro 二、spring-shiro如何实例化并执行对应的permission? permission执行的片段过程:PermissionAnnotationHandler的assertAuthorized,里面会调用DelegatingSubject。DelegatingSubject里面会委托SecurityManager,默认实例化的SecurityManager就是AuthorizingSecurityManager,AuthorizingSecurityManager会再把任务委托给Authorizer,这里Authorizer的实例是ModularRealmAuthorizer,ModularRealmAuthorizer会把任务再委托给AuthorizingRealm,AuthorizingRealm会把任务再给Permission。 实例过程: PermissionAnnotationHandler -> DelegatingSubject -> AuthorizingSecurityManager-> ModularRealmAuthorizer -> AuthorizingRealm -> Permission 抽象过程: PermissionAnnotationHandler -> Subject -> SecurityManager -> Authorizer -> Realm -> Permission 如果没有这个权限,会在ModularRealmAuthorizer的assertRealmsConfigured抛出IllegalStateException异常。 核心想法:自定义permission 1. 核心想法&思路 我们详细说一下,我们可以利用的过程。我们沿着一个核心的问题出发,自定义permission。 问题 在permission执行的片段过程中,它在哪里开始初始化? 最后我们可不可以自定义permission? 在哪里处理permission逻辑? 如果可以那如何去定义? 问题一 问题:在permission执行的片段过程中,它在哪里开始初始化? 经过调试,把代码定位到了AuthorizerRealm上面。其它作用看具体解答的第二处。 重点关注第一个isPermitted的注释说明。 结论:如果要自定义Permission,就得自定义PermissionResolver,让它去实现我们自定义的Permission。但是要覆盖AuthorizingRealm的setPermissionResolver方法。 public abstract class AuthorizingRealm extends AuthenticatingRealm implements Authorizer, Initializable, PermissionResolverAware, RolePermissionResolverAware { // 本次问题的主角依赖。get/set不贴出来了 private PermissionResolver permissionResolver; private RolePermissionResolver permissionRoleResolver; public boolean isPermitted(PrincipalCollection principals, String permission) { // 问题核心,这里直接得到Permission的实例。 // PermissionReasolver的作用就是创建Permission实例的地方,在resolvePermission方法中创建。 // WildcardPermissionResolver就是一个好例子。 // 重点:所以我们自己自定义一个PermissionResolver,然后覆盖掉AuthorizingRealm的setPermissionResolver就行了。 Permission p = getPermissionResolver().

Detected applied migration not resolved locally:

目录 报错解决趴源码 报错解决 我的报错 Detected applied migration not resolved locally:2解决 其实就是我自己之前迁移了一个版本为2的sql,然后我把它删了,它再第二次运行的时候,找不到我之前迁移过的V2__orange_cms这个文件。 把原来迁移过的、删除的sql文件恢复就行,或者把flyway_schema_history表的数据干掉,这个我没试过啊,猜测的。 趴源码 调试:上下两张图对比,就清楚了。上面我db/migration有两个版本,下面只有一个版本,而且V2是之前执行过的。

vue2.0基于element ui 上月 本月 下月

<div style="margin-bottom:15px ;float:right;"> <el-button-group> <el-button plain @click="time(1)">上一月</el-button> <el-button plain @click="time(2)">本月</el-button> <el-button plain @click="time(3)">下一月</el-button> </el-button-group> </div> time(val) { if (val == 1) { let myDate = new Date(); let yy = myDate.getFullYear().toString(); //获取完整的年份(4位) let mm = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月) let rr = myDate.getDate(); //获取当前日(1-31) let firstDay = new Date(yy, mm - 2, 1).getFullYear().toString() + "-" + (new Date(yy, mm - 2, 1).getMonth() + 1 > 9 ? new Date(yy, mm - 2, 1).

【sql语句基础】——查(select)(合并查询)

目录 合并查询单独查询合并查询——UNION ALLUNION ALL定义UNION ALL代码示例UNION ALL查询结果 合并查询——UNION ALLUNION 定义UNION 代码示例UNION 查询结果 合并查询 当我们需要将多个select查询结果合并在一起的时候,可以使用集合操作符号:union all 和union emp表如下 单独查询 SELECT ename,sal,job FROM emp WHERE sal>2500; 查询结果为5条 SELECT ename,sal,job FROM emp WHERE job='MANAGER'; 查询结果为3条 合并查询——UNION ALL UNION ALL定义 union all 将两个查询结果合并,不会去重 UNION ALL代码示例 SELECT ename,sal,job FROM emp WHERE sal>2500 UNION ALL SELECT ename,sal,job FROM emp WHERE job='MANAGER' UNION ALL查询结果 查询结果有8条,有两条重复记录 合并查询——UNION ALL UNION 定义 union 将两个查询结果合并,会去重 UNION 代码示例 SELECT ename,sal,job FROM emp WHERE sal>2500 UNION SELECT ename,sal,job FROM emp WHERE job='MANAGER' UNION 查询结果 查询结果有6条,可见去除了两条重复记录

Output 1 of SplitWithSizesBackward0 is a view and is being modified inplace.

1)在运行esrgcnn代码的过程中遇到了些许的坑,最难解决的、也是最后一个困难终于算是解决了。 2)在运行代码测试自己的图片时候,一直报错: Output 1 of SplitWithSizesBackward0 is a view and is being modified inplace. This view is the output of a function that returns multiple views. Such functions do not allow the output views to be modified inplace. You should replace the inplace operation by an out-of-place one. 复制粘贴到百度后,仔细研读各位大佬的代码后,解决了这个问题。 !!!我严格按照代码里的readme文档重新安装了软件 !!!我分析了tcw_sample_b.py中的代码。发现了确实有一个变量有些许问题,就做了稍许修改。 for step, (hr, lr, name) in enumerate(dataset): if "DIV2K" in dataset.name: t1 = time.time() h, w = lr.size()[1:] h_half, w_half = int(h/2), int(w/2) h_chop, w_chop = h_half + cfg.

使用cmd命令删除文件夹以及新建文件(解决vue中node_modules删不掉,右键删除慢,使用命令删除node_modules)

1.删除空文件夹 rmdir 空文件夹名 或者 rd 空文件夹名 2.删除文件夹以及文件夹内所有内容(/s是删除所有子目录以及其中的内容;/q是在删除时,不提示yes or no) rmdir /s/q 文件夹名 npm cache clean --force // 删除文件夹后 可以清理下缓存 如果在vscode中键入这个命令删除node_modules文件夹, 提示node_modules下面有某个文件夹不为空。这时,右键在文件资源管理器中显示,按住shift+右键 打开当前命令窗口。再次 rmdir /s/q node_modules 就可以删除掉了 3.删除指定盘符的文件夹(删除D盘multify文件夹下的my-multify文件夹以及子内容,并且不提示) rmdir /s/q d:\multify\my-multify 4.新建文件 cd .>user.js // 在当前目录下新建user.js文件 5.新建文件夹 mkdir routers // 新建routers文件夹 6.删除文件 del 文件名 例如: del test.txt

vue回车事件

一、需求 需求: 登录页面在输入密码后,按回车键(Enter),触发登录。 二、实现(部分代码) 重点事件: @keyup.enter.native 指的是回车监听事件。 举例: @keyup.enter.native="submitForm('ruleForm')" @keyup.enter.native 后面 submitForm(‘ruleForm’) 指的是回车(Enter)后的方法逻辑。 <el-form-item prop="tmpPassword"> <el-input show-password v-model="ruleForm.tmpPassword" placeholder="输入密码" <!-- @keyup.enter.native 回车事件,submitForm 登录方法(自己写的登录方法) --> @keyup.enter.native="submitForm('ruleForm')" ></el-input> </el-form-item>

IDEA中用java实现简单记事本(保姆级)

这个代码是我参考了其他众多文章,总结精简出来的规范代码,能注释的代码我都给注释了,直接拷贝后导入相关包即可使用。感谢大家的一键三连! package 实习; import com.sun.corba.se.impl.protocol.JIDLLocalCRDImpl; import javax.swing.*; import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.util.Calendar; //以上都是一些需要用到的库类 public class 下拉式菜单 { public static void main(String[] args) { SwingUtilities.invokeLater(下拉式菜单::creatGUI); } public static void creatGUI() { //创建可视化窗口 JFrame f = new JFrame("###的小本本"); //设定显示位置,左上角为(0,0),根据笔记本电脑的显示分辨率设置成在正中间显示 f.setLocation(480, 270);//这是显示窗口的左上角坐标 //设定窗口大小为屏幕1/2倍(电脑显示分辨率) f.setSize(960, 540);//我电脑显示分辨率为1920*1080 //创建文本域用来打字显示出来的 JTextArea WBY = new JTextArea("Hello");//这里可以输入东西到时候打开窗体自动显示出来 WBY.setFont(new Font("", Font.BOLD, 25)); //设置文本域为自动换行 WBY.setLineWrap(true); //将文本域添加到含有下拉框的面板中 JScrollPane MB = new JScrollPane(WBY); //将含有下拉框的面板放入内容面板中 f.

xx通用管理系统(超级好看的界面)javaswing+mybatis

大三上了,才真正写出了自己第一给管理系统,想想也太废了。不该好在最近已经学了很久javaweb了,不过整个大一大二,是真的打水漂了。。。。。。 先演示一下界面叭 登录界面 注册界面 功能模块界面 大致说一下这个背景的添加方法叭 就是在窗体或者面板上加一个标签 然后标签用imageIcon属性 大致是这样的 ImageIcon imageIcon=new ImageIcon(this.getClass().getResource("login4.png")); JLabel lbBg = new JLabel(imageIcon); lbBg.setBounds(0, 0, 745, 400); this.getContentPane().add(lbBg); 还挺简单的,不过值得一提的是,这种方法有一个很大的问题,就是有可能输入框加载不出来,我就偶尔遇到这种bug,我对swing的学习不深入。所以也懒得去找原因。swing按理说已经被淘汰了,但是现在学校只能用swing,因为b/s网页结构的,根本就不教。叫学生自己学的话,也不是很现实。怎么说呢,看自觉叭。 其他的部分就平平了,后面为了赶进度,做得很简陋,但是麻雀虽小,五脏俱全叭 其他功能的展示:

VB语言通用基础语句

一.赋值语句 变量的赋值 格式: [Let] <变量> = <表达式> 功能:先计算赋值号右边表达式的值,然后将值赋值给变量。 注意: 1.“=” 意义是“赋值”,x = y和y = x不等价,前者是将y的值赋给x,后者是将x的值赋给y; 2.“=”左边只能是变量,不能是数值或表达式; 3.一次只能赋值一个 例如: sum = 0 i = 0 不能写成: sum = i = 0 对象属性的值设置 格式:对象名.属性名 = 属性值 R = Val(Text1.Text) 例如: dim a Command1.Caption = “天才” a=123456 Text2.Text=str(a) 二.打印语句 对象名.Print 【指定对象名1,指定对象名2】 功能:在指定的对象上输出指定元素的值。 例如: Private Sub Command1_Click() a = 123 b = 456 c = 789 Form1.Print a; b; c ‘输出在窗体Form1上 Print “霍华德”, “布克”, a + b + c ‘输出在窗体Form1上

常见威胁建模框架分析与比较

1 概述 威胁建模的方法最初是为了帮助开发更多的安全的操作系统,但已经开发的大量威胁建模方法,有些只关注软件发展,有些仅涵盖业务或组织的风险和威胁,另有一些可能是技术性的,不同的威胁模型都在基于不同的目的而开发和使用的。 美国国土安全部(DHS)的下一代网络基础设施(NGCI)Apex计划将使用威胁建模和网络攻防演练的方式来为风险指标的开发、技术的评估和探寻,以及为如何降低风险提供信息。DHS评估了现有的框架无法满足其NGCI Apex计划的需求,促使其开发一个威胁建模框架。 1.1 威胁模型相关概念 不同场景下对威胁的定义有些不同:比如威胁是可能通过未经授权的披露、滥用、更改或破坏信息或信息系统而对信息或信息系统的机密性、完整性或可用性造成损害的事件。(联邦金融考试委员会)任何可能通过未经授权的访问、破坏、披露或修改信息和/或拒绝服务。(NIST)。威胁事件:有可能导致不良后果或影响的事件或情况。 NIST SP800-30R1中识别四种类型的威胁源:对抗性、意外、结构和环境。对抗性威胁有两个主要方面: • 特征(例如能力、意图和目标 [NIST 2012]) • 行为通常称为恶意网络活动,该行为可以用TTP来描述: – “战术是对行为的高级描述,技术是在战术背景下对行为的详细描述,而程序则是在技术背景下的更低层次、更详细的描述。TTP描述攻击者使用特定恶意软件变种、操作顺序、攻击工具、传递机制(例如,网络钓鱼或水坑攻击)或漏洞利用的倾向。”[NIST 2016c] – 行为或行动可以根据威胁向量(或攻击向量)来表征,攻击向量或攻击路径是达到网络威胁攻击效果的一般方法,可以包括网络的、物理或动力学、社会工程和供应链攻击。攻击向量受攻击发生的环境影响,通常在事件处理或漏洞修复中被枚举。 威胁场景通常指的是一组离散的威胁事件,与特定威胁源或多个威胁源相关联。用来描述事件是如何由威胁源引起的,或导致损害的。威胁场景的开发在分析上很有用,因为某些漏洞可能不会被利用。并分析说明一组漏洞如何综合起来,可能被一个或多个威胁事件利用。此外,威胁场景讲述了一个故事,用于风险沟通和分析。 2 威胁建模的使用 网络威胁建模是在网络空间中开发和应用对抗性威胁(来源、场景和特定事件)表示的过程。对抗性威胁可能针对或 影响设备、应用程序、系统、网络、任务或业务功能(以及支持该任务或业务功能的系统系统)、组织、区域或关键基础设施部门。网络威胁建模过程可以通过多种方式为网络安全和弹性相关的工作提供相关信息,可用作风险管理的一部分,也可用作网络攻防演练、技术分析和探寻、系统安全工程、安全运营和分析等环节。被认定为与NGCI Apex程序是相关的有三个:风险管理和度量的输入;网络战中威胁场景的构建;技术的探寻。 2.1 风险管理和度量 2.1.1 威胁模型可作为风险管理的输入 风险管理可以由四个组件或过程组成:风险框架、风险评估、风险响应和风险监控。 • 风险框架,陈述对风险管理环境的假设并定义风险管理策略,威胁源的假设是核心,威胁事件的特征或分类可用于网络安全组合管理 • 风险评估,将威胁模型与环境模型(可能发生威胁的操作和技术)结合在一起,威胁场景或单个威胁事件的可能性和后果严重性 • 风险响应,涉及评估潜在的替代或风险缓解的措施(降低后果的可能性和/或严重性的方法),因此侧重于威胁模型的威胁事件和威胁情景 • 风险监控,涉及寻找环境变化的迹象,特别是在进行持续监控和安全评估的系统中的对手活动指标,强调威胁事件并依赖于威胁信息共享,但更高级别的情报分析会寻找对手特征的变化,并反馈给风险框架和风险 识别威胁源和事件是风险评估的开始,如下图所示 图1:威胁建模与风险评估的集成 图2:威胁与风险评估中要素的关系 2.1.2 威胁模型支持风险管理的决策范围 网络安全风险可以在不同的范围内进行管理,主要对应于组织层(或执行层)、任务/业务功能层(或业务/流程层)和信息系统层(或实施/运营层)。 • 系统实施或运营级别,威胁模型可以促使选择特定的安全控制或行动方案,如SDLC的阶段 • 任务/业务功能级别,威胁模型可以促进企业架构、信息安全架构及特定的业务功能架构 • 组织层面,威胁模型反映并表达了组织的威胁环境的假设 在企业之上,威胁模型可以为威胁情报信息共享提供通用结构,并可支持多方参与的网络攻防演练的开发 图3:威胁模型支持的风险管理的范围 2.1.3 用于风险评估的威胁建模方法 在风险评估中,具体采用的威胁建模的方法可以从三个方向开始: • 首先对威胁进行通用或具体的建模,然后将其应用于相关环境; • 对环境中的系统、数据和边界进行建模,然后确定哪些相关的威胁; • 首先识别被威胁影响的组织的资产,描述可能影响或针对这些资产的威胁,并根据系统定位资产。 该三种方法是以风险的不同方面作为威胁建模的起始点,但评估风险的模式都是一样的,包括假设相关环境的脆弱性、评估威胁事件和场景发生的可能性和影响的严重性。 图4:威胁模型的方法 2.2 技术剖析和探寻 网络安全控制、技术和实践有助于降低风险,威胁模型中的对手的特征和典型行为也常用于开发的工作描述中,或者更信任的模型来用于建立标准,评估安全的产品。 为支持技术的探寻,一种是使用网络防御矩阵的方法进行分类,如下图Cyber Apex Review Team (CART)使用的和CSF框架相映射的方法。CART识别出金融服务行业的四个重点:Network-Identitfy,Network-Detect, Data-Protect, and Data-Detect。每个单元也可以被视为给定风险缓解的效果的类型。