Browse Category

杂记

适配器模式

定义:将一个类的接口,转换成客户期望的另一个接口。适配器让原本的接口不兼容的类可以合作无间

适配器模式的理解可以类比现实中的适配器,比如笔记本电脑的电源适配器,作用就是将插座上220v的交流电转换为笔记本可以直接使用的电能。那么代码中,适配器就是把一个接口转换为另一种标准来提供服务。

这种模式简单,但是十分强大有力。任何简单的东西都是优美的。

策略模式

定义:定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

目的:通过组合,面向接口,等等手段来应对日常开发中可能会出现频繁变化的情况。达到通过扩展和组合应对变化,优雅的保护稳定代码,对修改封闭;

定义算法族就是把某一类行为抽象成接口,在类中通过组合的方式把接口组装到类中,当业务出现变化的时候,就可以通过动态组合算法具体实现来应对变化的情形。

应用场景:以常写的mvc三层模式来举例子,一般的controller都需要有一些通用的方法,例如获取当前登录用户,获取request参数列表等等方法;这些是不变的部分,可以封装到一个BaseController的父类中,但是每个Controller又可能需要提供各种各样的不同的服务,查询不同的表。同时也会有两个不同的Controller里面需要查询相同的表;这时候就可以将这些变化的部分封装为算法族,也就是service,通过接口的方式进行组合。运行时按照需要注入相应的实现即可;

下面来看应对一种变化的情况,例如之前某个service的实现是查询的数据库中的数据,现在数据来源变成了通过接口服务获取的,那么我们只需要对这个service再做一个实现,重新组装到原来的Controller中去即可。原先稳定的代码不需要做修改,可以说我们是对代码做了扩展,然后做了重新组合,提高代码复用度;以优雅的方式实现对接口拔插;

以上 –jason 20190103

rsa和aes实现编程式动态加密思路

一、对比学习来认识两种加密方式

RSA(三位发明者名字)AES(Advanced Encryption Standard高级加密算法)
加密类别非对称加密对称加密
安全性抵抗到目前为止已知的绝大多数密码攻击对称密钥加密中最流行的算法之一
加密原则公钥加密,私钥解密;私钥加密,公钥解密同一个秘钥加密的只有同一个秘钥能解开
加密效率加密效率较慢但是安全级别很高加密效率较快安全级别相对较高
总体介绍(可以不读很无聊)之所以叫 RSA算法,是因为算法的三位发明者RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准,主要的算法原理就不多加介绍,如果对此感兴趣的话,建议去百度一下RSA算法。需要了解的是RSA算法属于非对称加密算法,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。简单的说是“公钥加密,私钥解密;私钥加密,公钥解密”。高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

二、动态加密实现方式

加密对象为http请求中要传输的数据,现在讲的是一个动态加密的流程;

1.第一步用AES对内容进行高效加密       首先要对数据进行加密,由于传输的内容数据量一般会比较大,加密时应当选择加密效率较高的AES(对称加密)对内容进行加密。然后通过http进行传输,首先在客户端随机生成一个AES key,然后用这个随机的key对内容进行高效率加密。加密完成之后把数据发送到服务端,这个时候你肯定发现问题了,我把内容发送到了服务端我没有那个随机的key我怎么解密呢,是的我们要想办法把这个AES KEY发送到服务端。那么我们直接明文发送这个key行不行呢?当然是不行的,被拦截之后别人可以直接拿这个key对内容进行解密,那我们之前的工作就等于功亏一篑了。那么我们看第二步骤。主角登场。

2.第二步用RSA 公钥对上一步的key进行加密传输       这里我们用RSA的公钥对上一步的AES key进行加密,由于AES key比较短,所以加密不会消耗太久,这点可以放心。把AES 的随机key加密之后我们就可以安心的在网络中进行传输了,这个随机的key的解密是需要RSA的私钥才能解密的(公钥加密,私钥解密;),但是这个私钥只有我们服务端才有,其他任何人都不可能有。所以这个私钥一定要好好保管不能泄露。下面看第三步

3.第三步用RSA私钥解密AES KEY并用解密后的AES KEY对传输的私密数据进行解密,拿到数据,完成一套安全的数据传输。
这里只讲到了从客户端发送给服务端的原理,那么服务端发送给客户端的时候如果数据也比较私密我们怎么处理呢。其实能看到这里我相信你已经有了自己的想法了,刚刚我们用到的那个aes key,这时候已经同时存在服务端和客户端了,这时候返回的数据只需要在服务端用AES加密发送给客户端,然后客户端用这个AES KEY直接进行解密即可。当然如果响应数据不是私密数据,你完全可以不用加密。

linux常用命令

1.软件包管理:yum

安装 yum install xxx

卸载 yum remove xxx

搜索 yum search xxx

清缓存 yum clean packages

列出已安装裂变yum list

软件包信息yum info xxx

2.服务器硬件资源信息

内存:free-m m表示以m为单位进行展示

硬盘:df-h h表示以humen能看懂的方式进行展示

负载: w/top

w命令load average:1分钟,5分钟,15分钟的负载值

top命令按q退出

查看cpu信息 :cat /proc/cpuinfo

fdisk格式化磁盘命令

3.文件操作命令

在linux下面一切皆文件

linux文件的目录结构

根目录/

家目录/home  ~当前用户的家目录

临时目录/tmp

配置目录/etc

用户目录/usr

ls -al列出所有文件包含隐藏文件=ll

文件基本操作

ls 查看目录下面的文件

touch新建文件

mkdir新建文件夹 -p创建多层

cd进入目录

rm 删除文件或者文件夹 -r删除多层 -rf 强制删除

cp复制 cp ./srcfile  ~/tofile

mv移动剪切

pwd显示当前目录

文本编辑程序vim

安装命令 yum install vim

vim 文件名打开文件   按i开启插入模式  esc退出插入模式 输入: wq保存并退出

vim开大模式下gg表示移动到行首G表示移动到行尾,dd表示删除一行(u恢复)

yy某一行,移动光标按p可以拷贝一行

文件权限421

文件搜索查找读取

文件压缩解压

Linux学习之ssh

1.通过配置config文件来实现客户端快捷登录,不用每次输入用户名和ip地址

配置文件位置为:~/.ssh/config
文件里面配置(如果没有通过touch config来创建该文件)然后做如下配置

host “jason1”

        hostName 192.168.197.129

        User root

        Port 22

host “jason2”

        hostName 192.168.197.129

        User root

        Port 22

配置之后可以使用:ssh  jason1 这样来通过ssh进行连接;这时候只需要输入密码即可不用每次都输入root:@192.168.197.129

2.SSH免密码登录:ssh key

将私钥存放在~/.ssh目录下(需要通过ssh-add ~/.ssh/私钥文件名)把私钥加载到ssh私钥库中

公钥可以对外公开,放在~/.ssh/authorized_keys

Linux生成sshkey

ssh-keygen –t rsa

ssh –keygen –t dsa(加密算法不同)

生成后公钥放在authorized_keys  key的列表里面

然后通过ssh-add ~/.ssh/private_rsa(私钥文件名) 命令把私钥加载到ssh私钥库中去,然后客户端就可以直接通过公钥进行连接,不用输入密码特别快捷而且安全

3.修改ssh端口号更加安全

vim /etc/ssh/sshd_config

修改

Port 22

Port 10086

配置多个可以监听多个端口

重启service sshd restart

easyui form回车绑定tab实现

//功能:将回车键转tab键

    $('input:text:first').next('span').find('input').focus();
    var $inp = jQuery('input:text');
    $inp.bind('keydown', function (e) {
        debugger;
        var key = e.which;
        if (key == 13) {
            e.preventDefault();
            var nxtIdx = $inp.index(this) + 1;
            $(":input:text:eq(" + nxtIdx + ")").next('span').find('input').focus();
        }
    });

idea的Terminal npm不能使用

打开cmd窗口(window的窗口不是idea的),然后在标题处右击选择属性,然后勾上使用旧版控制台,确定,重启电脑,解决