日期和时间的正则表达式

//日期的正则表达式 var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/; var regExp = new RegExp(reg); if(!regExp.test(value)){ alert("日期格式不正确,正确格式为:2014-01-01"); return; }   //时间的正则表达式 var reg = /^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/; var regExp = new RegExp(reg); if(!regExp.test(value)){ alert("时间格式不正确,正确格式为:12:00:00"); return; }   //日期+时间的正则表达式 var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/; var regExp = new RegExp(reg); if(!regExp.test(value)){ alert("时间格式不正确,正确格式为: 2014-01-01 12:00:00 "); return; } });   from:https://www.cnblogs.com/zhilongblogs/p/4074162.html

龙生   27 Jul 2018
View Details

Jenkins 2.x版本的节点配置选项更新

【Dumb slave】改成了【Permanent Agent】,效果一致 参考:http://serverfault.com/questions/793619/jenkins-trying-to-add-a-dumb-slave-but-the-option-is-missing-any-idea-how-to-a 没有【Launch agent via Java Web Start】选项: 需要开启【TCP port for JNLP agents】: 参考:http://serverfault.com/questions/794783/the-option-to-launch-slave-agents-via-java-web-start-is-missing-from-new-node   from:http://www.cnblogs.com/EasonJim/p/5997490.html

龙生   26 Jul 2018
View Details

Jenkins slave agent 分布式构建

Jenkins 通过 manage nodes 实现了 分布式构建. 1. Add nodes 1).  ‘Remote FS root’ (在slave机器上腾出一个空文件夹,jenkins在分布构建时会remote并copy相应的文件至此) 2). 并且为该slave指定lable,并在job配置页面设置运行的节点 2.  slave和master的通信,jenkins提供了的四种途径: 若slave为Unix/Mac, 果断通过 SSH,即上图的第一种方式。 也是最简单的方式,此处略。 若slave为windows, 只能下面三种,不过我建议第二种,只要在windows机器上运行jnlp脚本(required java6++)连通jenkins,如下提示了3种运行方式: 此处注意,确保你jenkins-system config中设置 jenkins URL 不是localhost,而是如上ip 或者 hostname,因slave运行jnlp时只认config中设置的URL。 若你使用前2种 launch agent,成功后会提示connected,此时点击 file-> Install as Windows Service 你差不多猜到这么作为service的好处了,不用每次在windows重启后还要launch agent,这样作为服务可以开机自启动。   from:https://www.cnblogs.com/GGHHLL/p/3251524.html

龙生   26 Jul 2018
View Details

DES/3DES/AES区别

DES 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES Data Encryption Standard) 。 目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。 DES算法的入口参数有三个:Key、Data、Mode。 其中Key为8个字节共64位,是DES算法的工作密钥; Data也为8个字节64位,是要被加密或被解密的数据; Mode为DES的工作方式,有两种:加密或解密。 DES算法是这样工作的: 如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果; 如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。 在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。 通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。     3DES 3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法。 3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。 设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密表,这样, 3DES加密过程为:C=Ek3(Dk2(Ek1(P))) 3DES解密过程为:P=Dk1((EK2(Dk3(C))) K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。在这种情况下,密钥的有效长度为112位。 AES AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。 用AES加密2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种候选算法中选出的一项新的密匙加密标准。Rijndael被选中成为将来的 AES。Rijndael是在1999年下半年,由研究员Joan Daemen 和 Vincent Rijmen 创建的。AES正日益成为加密各种形式的电子数据的实际标准。 美国标准与技术研究院(NIST)于2002年5月26日制定了新的高级加密标准(AES)规范。 AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。 AES使用几种不同的方法来执行排列和置换运算。AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。 与公共密钥加密使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。 算法   Key                  位数                 可逆?                其它 MD5    没有Key,             有区别16位和32位,    不可逆               (无) SHA    (?)              (?)                不可逆               (无) RSA    有(公Key,私KEY)   (?)                可逆                 公、私Key采用不同的加密算法 DES3   有                  (?)                可逆                 (无) AES    有                  (?)                可逆                 (无) BASE64 没有KEY             (?)                可逆                 (无) 哈希函数,比如MD5,SHA,这些都不是加密算法。要注意他们的区别和用途,很多网友都把md5说成是加密算法,这是严重不正确的啊。 哈希函数:MD5,SHA 是没有密钥的,相当与指纹的概念,因此也是不可逆的; md5是128位的,SHA有不同的算法,有128,256等位。。。如SHA-256,SHA-384 然后 就是 Base64,这更加不属于加密算法的范围了,它只是将byte[]数组进行了转换,为什么要转换呢?就是因为很多加密后的密文后者一些特殊的byte[]数组需要显示出来,或者需要进行传递(电子邮件),但是直接转换就会导致很多不可显示的字符,会丢失一些信息,因此就转换位Base64编码,这些都是可显示的字符。所以转换后,长度会增加。它是可逆的。 再就是 3DES,DES 这才是加密算法,因此也是可逆的,加解密需要密钥,也就是你说的key 最后是 RSA ,这是公钥密码,也就是加密和解密密钥不同,也是可逆的。 DES算法: DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,整个算法的主流程图如下: 其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则见下表: 58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8, 57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7, 即将输入的第58位换到第一位,第50位换到第2位,…,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的 左 32位,R0 是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果 为:L0=D58D50…D8;R0= D57D49…D7。 经过16次迭代运算后。得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置的逆运算,例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,其逆置换规则如下表所示: 40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25, 放大换位表 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11, 12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21, 22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1, 单纯换位表 16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10, 2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25, 在f(Ri,Ki)算法描述图中,S1,S2…S8为选择函数,其功能是把6bit数据变为4bit数据。下面给出选择函数Si(i=1,2……8)的功能表: 选择函数Si S1: 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, S2: 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, […]

龙生   25 Jul 2018
View Details

C#实现通过Gzip来对数据进行压缩和解压

C#实现通过Gzip来对数据进行压缩和解压

from:https://www.cnblogs.com/frankyou/p/5910074.html

龙生   25 Jul 2018
View Details

jenkins部署.net平台自动化构建

在引入自动化部署工具的时候,我们对比了jenkins和gitlab CI,jenkins有非常丰富的插件,配置起来方便。gitlab CI更倾向于脚本配置,当然jenkins也可以使用pipeline实现全脚本化配置(everything is code,哈哈)。我们这里主要讲述jenkins的自动化部署。 基本组合是jenkins+git+msbuild+python,实现从代码仓库拉取、编译、打包、部署、自动化测试。(.net core和framework4.6.1可以不依赖msbuild构建,将在下一篇文章中讲述) 一、安装环境 1.jenkins是java生态圈的产品,需要安装jdk 2..net项目依赖.net framework,安装需要的framework版本(如framework4.5.1) 3.安装构建工具msbuild 4.安装nuget 5.安装jenkins 二、配置jenkins 1.安装好jenkins后,进入“系统管理”->“插件管理”,安装git和msbuild这两款插件。     2.安装好插件后,新建一个项目,选择“构建一个自由风格的软件项目”,然后点确定。   3.源码管理选择git。     4.添加构建步骤,构建一个项目   5.项目需要nuget获取程序包的,可以使用批处理来实现,继续添加构建步骤:   6.nuget restore  命令获取项目需要程序包   Rebulid:构建 Configuratiom = Release:按release打包 DeployOnBuild = true/false:是否打包 PublishProfile=pub100:pub100是VS打包的配置文件   注意:这里的Msbuild Version选择了vs2017里的,jenkins插件库中的msbuild版本太低,编译经常出错,最简单的做法就是安装VS,然后在“系统管理”->“全局工具配置”中配置VS工具中的msbuild路径         7.构建触发器,jenkins提供定时构建及轮询机制。轮询是设置一段时间间隔,去代码仓库检测是否有更新,有更新触发构建。     8.保存,选择“立即构建”       9.构建成功   10.控制台日志   部署服务器和自动化测试都由python实现,感兴趣的可以看我另外一篇文章。   from:https://www.cnblogs.com/shenh/p/8946404.html

龙生   23 Jul 2018
View Details

Jenkins的详细安装及使用

操作环境:Windows 一、环境准备 1 安装JDK 本文采用jdk-8u111-windows-x64.exe; 2 配置tomcat 本文采用tomcat8,无需安装,配置JAVA_HOME及JRE_HOME环境变量即可; 3 安装maven 本文采用maven3.3.9,无需安装; 4 安装Jenkins 下载地址https://jenkins.io/download/,仅下载war包,如下图: 将下载好的jenkins.war放进tomcat/webapps目录下。   二、相关配置 1 登入http://localhost:8080/jenkins,进入Jenkins初始化页面,第一次启动时间可能有点长,耐心等待。进入成功后会看到如下画面,按提示路径打开密码文件,输入密码: 解锁后又是一长段时间等待,此后可能出现如下图所示界面: 表示无法下载Jenkins插件,可能是因为防火墙导致,而Jenkins插件的安装非常重要,建议翻墙。如无法翻墙,则选择Skip Plugin Installations跳过插件安装。进入以下页面,设置登陆用户: 2 设置成功后即进入Jenkins主界面: 点击左上侧系统管理,进入Jenkins基本系统设置(主要是以下三块): 3 先进入“管理插件”模块安装必需的插件,以下是建议安装列表:   将本文附件中的插件放入Jenkins插件存放目录即可,如本文插件存放目录为:C:\Users\Administrator\.jenkins\plugins(可点击系统管理–>系统设置,在最上方查看,如下图); 4 配置系统设置   添加编码全局属性: 增加系统管理员邮件地址: 其他的可用默认配置,保存后退出。 5 添加全局配置Global ToolConfiguration 配置JDK,不采用自动安装: 配置maven,不采用自动安装: 以上即为需要设置的系统配置。   三、系统部署 系统设置完成后开始添加任务,任务类型选择自由风格: 创建完成后可在主页看到如下画面: 在”All” tab下能看到新建的任务,点击该任务,进入该任务的配置页面: 设置项目备注及构建规则: 配置项目轮询的源码位置(@HEAD表示构建最新的代码)并配置代码访问密码: 配置构建触发器,如下图配置为每天晚上9:30开始构建(Cron表达式): 增加Invoke top-level Maven targets构建步骤,插件目标为编译、发现编译Bug、部署,另外还可以配置构建时忽略测试用例: 增加构建后操作步骤:Publish FindBugs analysis results,用于查看FindBugs插件的代码分析报告,该模块可采用默认配置: 增加构建后操作步骤:Deploy war/ear to a container,用于将构建后生成的war包部署至tomcat服务器,下图中Contextpath用于配置项目访问路径,如填/RMS_Server则表示项目的根访问目录为:http://localhost:8080/RMS_Server,Deploy on failure用于配置当前构建失败时是否仍然部署至tomcat,默认不选: 以上即为本项目的所有配置,完成后应用(或保存)并退出。 配置完成后即可开始构建,左侧可查看bugs分析信息及构建历史: 点击某个构建记录,如上图中的#31,即可查看构建日志、SVN代码提交日志及bugs分析结果:     四、编码问题 FindBugs分析报告中查看某些代码文件时可能出现中文乱码情况,如下图: 这是tomcat的编码问题导致的,可在系统管理中查看tomcat的相关编码情况: 主要关注的是file.encoding属性及sun.jnu.encoding属性,二者需要设置为UTF-8以兼容中文: 这可通过在tomcat配置文件/bin/catalina.bat文件中添加set “JAVA_OPTS=-Dfile.encoding=UTF-8-Dsun.jnu.encoding=UTF-8”命令实现,如下图: 配置完成后重启tomcat,可看到编码已经更改:       from:https://blog.csdn.net/hc_ttxs/article/details/79384535

龙生   23 Jul 2018
View Details

持续集成之③:将代码自动部署至测试环境

一:本文在上一篇文章的基础之上继续进行操作,上一篇实现了从git获取代码并进行代码测试,本文将在上一篇的基础之上实现将代码部署至测试环境。 1.1:新建一个项目叫web-demo-deploy用于代码发布,上一个项目web-demo可用于代码测试,当测试阶段出现问题的时候也不会立即进行发布,只有当测试通过之后才执行发布的项目即可: 1.2:如何将代码发布到web服务器: 1.2.1:可以通过执行命令或脚本的方式进行代码发布,在各web服务器创建一个www用户,用于启动web服务并进行代码发布:

1.2.2:在git服务器将www用户的公钥添加至部署key,将root的公钥添加至ssh key,以让www用户有获取代码权限,让root用户有提交代码的权限: ssh keys和deploy keys区别: github账户的SSH keys,相当于这个账号的最高级key,只要是这个账号有的权限(任何项目),都能进行操作。 仓库的Deploy keys,顾名思义就是这个仓库的专有key,用这个key,只能操作这个项目,其他项目都没有权限。 说白了就相当于你有一所大别墅,SSH key能开别墅中的任何一个房间。而Deploy key只能开进别墅中的一个单间。 1.2.4:确认www用户有拉取代码权限: 1.3:关于shell脚本执行权限: #稍后会通过jenkins执行一个脚本,从而完成代码的发布,但是默认执行的用户是jenkins,需要赋予jenkins一定的权限,另外发布的脚本可能在本机也可能不在本机,本次设想不在本机保存脚本,则设置如下: 1.3.1:解决脚本运行问题: #将脚本放在www用户家目录/home/www,git代码也放在家目录,因此需要jenkins服务器远程到代码发布服务器执行远程命令,需要做免登陆认证,将jenkins服务器root和www用户的公钥放在代码部署服务器的www用户家目录.ssh/authorized_keys文件中,使jenkins服务器能够不输入密码就可以调用部署服务器的脚本: jenkins服务器:192.168.3.199 deploy部署服务器:192.168.3.12

  1.3.2:确认可以免密码远程登陆: 使用root和www用户测试一下是否可以免秘钥登陆,以便让部署服务器将用户的key添加到know_keys,否则报错Host key verification failed

  1.3.3:解决jenkins没有权限的问题,在jenkins服务器192.168.3.199上操作:

1.3.3:配置jenkins项目执行shell脚本: 1.3.3.1:脚本内容(需要放在部署服务器192.168.3.12的/home/www目录下):

  1.3.3.2:在jenkins调用脚本: #在项目的构建步骤调用,项目-配置-构建-增加构建步骤-Execute shell 访问web页面测试: 在git仓库创建代码并更新至git服务器:

  再次在jenkins执行项目构建 可以看到刚刚更新的代码获取成功 1.4:让代码测试项目管理代码发布项目,当代码测试的项目执行成功之后自动调用代码发布的项目完成代码部署: 1.4.1:安装插件,jenkins的插件默认安装路径

tomcat版本的安装路径:

如果插件在线安装不成功可以下载插件到此目录然后把属主属组改成jenkins再重启jenkins服务即可完成安装: #系统管理-管理插件-可选插件,搜索Parameterized: 1.4.2:配置项目demo的构建后操作,demo构建完成后自动构建demp-deploy项目: #jenkins-->web-demo-->配置-->构建后操作: 1.4.3:配置如下: 1.5:测试,执行代码测试项目成功之后是否会自动执行代码部署项目: 控制台输出

  1.6:pipeline插件: 1.6.1:#安装插件,系统管理-管理插件-可安装插件: 1.6.2:创建视图: 1.6.3:自定义名称: 1.6.4:配置pipeline信息,点击OK之后,弹出如下视图 点击保存之后显示的最终界面: from:https://www.cnblogs.com/reblue520/p/7131568.html?utm_source=itdadao&utm_medium=referral

龙生   23 Jul 2018
View Details

C#中FlagsAttribute属性在enum中的应用

Net C#中枚举的声明格式如下所示:

FlagsAttribute属性就是枚举类型的一项可选属性。它的主要作用是可以将枚举作为位域处理(P.S. C#不支持位域)。所谓位域是单个存储单元内相邻二进制位的集合。通过为枚举添加这个属性,可以改变枚举的一些行为来满足我们的需要。

因为对于整数来说,| 操作就是将其转化为二进制再进行或运算。Flags.Flag2 | Flags.Flag3做的工作实际上是 0001 | 0010 = 0011 = 3再转换成(MyFlags)3就是Flag4了 如果枚举声明如下:

则上述结果为Flag2,Flag3,这样做的意义在于我们可以实现“或”的关系。 就上例而言,myFlag可以更直观的表现为011,因此当我们想要检验它满足哪个枚举值时我们可以使用&操作:

011&001 = 001,011&010 = 010,因此这两个if都会成立,这就是这种枚举的意义吧。另外我们应当注意默认初始化的myFlag的值为0,与其作&运算不会有任何结果。   from:https://blog.csdn.net/zhulongxi/article/details/52371853

龙生   23 Jul 2018
View Details
1 177 178 179 432