socks

socks 采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器。Socks是个电路级的底层网关,是 DavidKoblas在1990年开发的,此后就一直作为Internet RFC标准的开放标准。Socks不要求应用程序遵循特定的操作系统平台,Socks 代理与应用层代理、 HTTP 层代理不同,Socks代理只是简单地传递数据包,而不必关心是何种应用协议 (比如FTP、HTTP和NNTP请求) 。所以,Socks代理比其他应用层代理要快得多。它通常绑定在代理服务器的1080端口上。 https://baike.baidu.com/item/SOCKS

2018-02-25 · 1 min · 10 words · -

apache portable run time libraries

apache portable run time libraries http://blog.csdn.net/swartz_lubel/article/details/79215764 随着Apache的进一步开 发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用 APR而已。目前APR主要还是由Apache使用,不过由于APR的较好的移植性,因此一些需要进行移植的C程序也开始使用APR,开源项目比如 Flood loader(http://httpd.apache.org/test/flood/,该项目用于服务器压力测试,不仅仅适用于Apache)、FreeSwitch(www.freeswitch.org),JXTA-C(http://jxta-c.jxta.org,C版本的JXTA点对点平台实现);商业的项目则包括Blogline(http://www.bloglines.com/,covalent(http://www.covalent.net、FreeSwitch(www.freeswitch.org),JXTA-C(http://jxta-c.jxta.org,C版本的JXTA点对点平台实现);商业的项目则包括Blogline(http://www.bloglines.com/,covalent(http://www.covalent.net))等等。 APR使得平台细节的处理进行下移。对于应用程序而言,它们根本就不需要考虑具体的平台,不管是Unix、Linux还是Window,应用程序执行的接口基本都是统一一致的。因此对于APR而言,可移植性和统一的上层接口是其考虑的一个重点。而APR最早的目的并不是如此,它最早只是希望将Apache中用到的所有代码合并为一个通用的代码库,然而这不是一个正确的策略,因此后来APR改变了其目标。有的时候使用公共代码并不是一件好事,比如如何将一个请求映射到线程或者进程是平台相关的,因此仅仅一个公共的代码库并不能完成这种区分。APR的目标则是希望安全合并所有的能够合并的代码而不需要牺牲性能。 APR的最早的一个目标就是为所有的平台(不是部分)提供一个公共的统一操作函数接口,这是一个非常了不起的目的,当然也是不现实的一个目标。我们不可能支持所有平台的所有特征,因此APR目前只能为大多数平台提供所有的APR特性支持,包括Win32、OS/2、BeOS、Darwin、Linux等等。为了能够实现这个目标,APR开发者必须为那些不能运行于所有平台的特性创建了一系列的特征宏(FEATURE MACROS)以在各个平台之间区分这些特征。这些特征宏定义非常简单,通常用APR_HAS_FEATURE参数设置: 如果某个平台具有这个特性,则该宏必须设置为true,比如Linux和window都具有内存映射文件,同时APR提供了内存映射文件的操作接口,因此在这两个平台上,APR_HAS_MMAP宏必须设置,同时ap_mmap__函数应该将磁盘文件映射为内存并返回适当的状态码。如果你的操作系统并不支持内存映射,那么APR_HAS_MMAP必须设置为0,而且所有的ap_mmap__函数也可以不需要定义。第二步就是对于那些在程序中使用了不支持的函数必须提出警告。

2018-02-23 · 1 min · 15 words · -

systemd script, systemd unit, 启动脚本

systemd script, systemd unit, 启动脚本 service unit 配置文件 template vim /etc/systemd/system/foo.service [Unit] Description=start proxy After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/proxy.sh RemainAfterExit=true [Install] WantedBy=multi-user.target [Unit] # 服务启动时会在 journal 里打印 description0 Description=description0 After=network.target sshd-keygen.service [Service] # 脚本路径必须是绝对路径 /bin/sh 为 shell 解释器不能省 ExecStart=/bin/sh /usr/local/bin/shell-script0.sh Environment="GODEBUG='gctrace=1'" Environment="ANOTHER_SECRET=JP8YLOc2bsNlrGuD6LVTq7L36obpjzxd" [Install] WantedBy=multi-user.target # 在哪个服务后面启动 (如依赖的服务) Requires=pulseaudio.service # 在哪个服务后面启动 (如依赖的服务) After=pulseaudio.service [Unit] 启动顺序与依赖关系 After 字段: 表示如果 network.target 或 sshd-keygen.service 需要启动, 那么 foo.service 应该在它们之后启动。 相应地,还有一个 Before 字段, 定义 foo.service 应该在哪些服务之前启动。 注意, After 和 Before 字段只涉及启动顺序,不涉及依赖关系。 ConditionPathExists, AssertPathExists: 要求给定的绝对路径文件已经存在,否则不做任何事(condition)或进入failed状态(assert),可在路径前使用!表示条件取反,即不存在时才启动服务。 ConditionPathIsDirectory, AssertPathIsDirectory: 如上,路径存在且是目录时启动。 StartLimitIntervalSec=400 StartLimitBurst=3 [Service] 区块 用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下 Type:定义启动时的进程行为。它有以下几种值。 Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出 Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行 Type=dbus:当前服务通过D-Bus启动 Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行 Type=idle:若有其他任务执行完毕,当前服务才会运行 ExecStart:服务启动时要执行的命令 ExecStartPre:启动当前服务之前执行的命令 ExecStartPost:启动当前服务之后执行的命令 ExecReload:重启当前服务时执行的命令 ExecStop:停止当前服务时执行的命令 ExecStopPost:停止当其服务之后执行的命令 RestartSec:自动重启当前服务间隔的秒数 Restart:定义何种情况 Systemd 会自动重启当前服务,no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, or always, 默认值: no TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数 Environment:指定环境变量 EnvironmentFile: 指定文件,可定义多个环境变量,按分行方式存储。 WorkingDirectory, 工作目录, 程序启动时的当前目录。如果使用到 workingdirectory,需要先创建该目录 [Install] 段落相关的指令,它们只在systemctl enable/disable操作时有效。如果期望服务开机自启动,一般只配置一个WantedBy指令,如果不期望服务开机自启动,则Install段落通常省略。主要包含以下内容: WantedBy 本服务设置开机自启动时,在被依赖目标的.wants目录下创建本服务的软链接。例如WantedBy = multi-user.target时,将在/etc/systemd/multi-user.target.wants目录下创建本服务的软链接。 RequiredBy 类似WantedBy,但是是在.requires目录下创建软链接。 Alias 指定创建软链接时链接至本服务配置文件的别名文件。例如reboot.target中配置了Alias=ctrl-alt-del.target,当执行enable时,将创建/etc/systemd/system/ctrl-alt-del.service软链接并指向reboot.target。 DefaultInstance 当是一个模板服务配置文件时(即文件名为Service_Name@.service),该指令指定该模板的默认实例。例如trojan@.service中配置了DefaultInstall=server时,systemctl enable trojan@.service时将创建名为trojan@server.service的软链接。 可以通过以下两个选项来设置服务启动的频率: ...

2018-02-23 · 5 min · 937 words · -

netty tcp tls

netty tcp tls 输出tls握手日志 -Djavax.net.debug=SSL #生成服务端密钥对和证书仓库 keytool -genkey -alias tlsServer -keysize 2048 -validity 365 -keyalg RSA \ -dname "CN=wiloon" -keypass password0 -storepass password0 -keystore server.jks #生成客户端的密钥对和证书仓库, 用于将服务端的证书保存到客户端的授信证书仓库中,命令如下: keytool -genkey -alias tlsClient -keysize 2048 -validity 365 -keyalg RSA \ -dname "CN=localhost" -keypass password0 -storepass password0 -keystore client.jks #导出服务端自签名证书 keytool -export -alias tlsServer -keystore server.jks -storepass password0 -file server.cer # 导出客户端自签名证书 keytool -export -alias tlsClient -keystore client.jks -storepass password0 -file client.cer #将服务端的证书导入到客户端的证书仓库中: keytool -import -trustcacerts -alias tlsServer -file server.cer -storepass password0 -keystore serverTrust.jks keytool -import -trustcacerts -alias tlsClient -file client.cer -storepass password0 -keystore clientTrust.jks http://www.infoq.com/cn/articles/netty-security ...

2018-02-22 · 1 min · 94 words · -

证书, x509, keystore, truststore, pem

证书, x509, keystore, truststore, pem 证书和编码 x509 X.509 证书, 其核心是根据 RFC5280 编码或数字签名的数字文档. 实际上,术语 X.509 证书通常指的是 IETF 的 PKIX 证书和 X.509 v3 证书标准的 CRL 文件,即如 RFC 5280 (通常称为 PKIX for Public Key Infrastructure (X.509))中规定的。 X.509 是一种常见通用的证书标准, 主要定义了证书中应该包含哪些内容. 其详情可以参考 RFC5280, TLS/SSL 使用的就是这种证书标准. X.509 是常见通用的证书格式。所有的证书都符合为 Public Key Infrastructure (PKI) 制定的 ITU-T X509 国际标准. X.509 DER 编码 (ASCII) 的后缀是: .DER .CER .CRT X.509 PEM 编码 (Base64) 的后缀是: .PEM .CER .CRT .cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。 .pem 跟 crt/cer 的区别是它以 Ascii 来表示。 ...

2018-02-22 · 3 min · 433 words · -

time command

time command 执行命令并计时 【格式】time [-p] command [arguments…] 【说明】 执行命令行"command [arguments…]",命令行执行结束时在标准输出中打印执行该命令行的时间统计结果,其统计结果包含以下数据: 1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间; 2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和; 3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和。 其中,用户CPU时间和系统CPU时间之和为CPU时间,即命令占用CPU执行的时间总和。实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。 另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。 例1: # time date Sun Mar 26 22:45:34 GMT-8 2006 real 0m0.136s user 0m0.010s sys 0m0.070s 在例1中,执行命令"time date"(见第1行)。系统先执行命令"date",第2行为命令"date"的执行结果。第3-6行为执行命令"date"的时间统计结果,其中第4行"real"为实际时间,第5行"user"为用户CPU时间,第6行"sys"为系统CPU时间。以上三种时间的显示格式均为MMmNN[.FFF]s。 在例1中,CPU时间 = 用户CPU时间 + 系统CPU时间 = 0m0.010s + 0m0.070s = 0m0.080s,实际时间大于CPU时间,说明在date命令运行的同时,还有其它任务在运行。 【参数说明】 -p 以POSIX缺省的时间格式打印时间统计结果,单位为秒。详细的输出格式见例2。 例2: # time -p date Wed Mar 27 00:33:11 GMT-8 2006 real 0.11 user 0.00 sys 0.02 在例2中,同样执行命令"time date"(见第1行)。系统先执行命令 “date”,第2行为该命令的执行结果。第3-5行为执行命令"date"的时间统计结果。注意本例的时间格式与例1中的时间格式差别,使用-p 参数后的时间显示格式为NN.FF,其单位为秒。 ...

2018-02-13 · 1 min · 197 words · -

bios boot partition

bios boot partition https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Disks/zh-cn (parted)mkpart primary 1 3 (parted)name 1 grub (parted)set 1 bios_grub on (parted)print https://www.cnblogs.com/f-ck-need-u/p/7084627.html BIOS boot partition是一个分区,gnu grub[译注1]用它来引导基于legacy bios但启动设备上却包含GPT格式分区表时的操作系统。这种结构有时候被称为BIOS/GPT启动[译注2]。 下图非原文内容,是本人提供,用于直观地感受bios boot分区。 Bios boot分区是必要的,因为GPT使用紧跟在MBR后面的扇区来保存实际的分区表,但在传统的MBR分区架构中,这些扇区并没有特殊的作用,这样的结果是没有足够的可用空闲空间来存储stage2这段boot loader。MBR中也存储了boot loader,但MBR无法存储超过512字节的内容,所以MBR中的这段boot loader被当作stage1使用,它的主要作用是加载功能更多更复杂的stage2这段boot loader,stage2可以从文件系统读取和载入操作系统内核。 当使用了BIOS boot分区,该分区将包含stage2的boot loader程序,例如grub2文件,而stage1的boot loader代码仍保留在MBR中。使用bios boot分区不是解决基于传统bios但使用了gpt格式磁盘问题的唯一方法,但是复杂的boot loader如grub2无法将无法完全符合MBR中的398-446字节的区域,因此它们需要一个辅助的存储空间。在MBR磁盘上,一般使用紧跟在MBR后的扇区空间来存储这些复杂的boot loader,这些扇区空间就是大众所熟知的"MBR gap"。而在GPT磁盘上,由于没有与MBR gap等效的未使用空间,所以单独使用一个bios boot分区来分配这样的空间,以存储复杂的boot loader。 BIOS boot分区的GUID可以是"21686148-6449-6E6F-744E-656564454649"。在基于BIOS的平台下的GPT中,BIOS boot分区有点类似于EFI平台下的EFI系统分区,EFI系统分区使用UEFI保存文件系统和文件,而用于BIOS平台的BIOS boot分区则不使用文件系统来保存代码(见上面的图,在bios boot分区上是没有创建文件系统的)。 bios boot分区的大小非常小,可以小到只有31kB(由于第一个扇区是mbr,所以bios boot的内容从第2扇区到第63扇区),但是由于未来boot loader可能会扩展,所以建议bios boot分区设置为1M大小,而且很多磁盘分区工具都使用1MB分区对齐策略,这样MBR到第一个分区之间会保留一些空闲空间。 在Example 2中,grub 2在bios boot分区中存储它的core.img。 [译注1]gnu grub: 现在使用的grub都是gnu山寨出来的grub,原始的grub早已消失在历史中。 [译注2]: 也就是bios MBR和gpt混用的模式。 转载请注明出处: http://www.cnblogs.com/f-ck-need-u/p/7084627.html

2018-02-12 · 1 min · 63 words · -

linux 查看分区表类型

linux 查看分区表类型 You can use parted -l to determine the type of partition table. Eg: $ sudo parted -l Model: ATA TOSHIBA THNSNS25 (scsi) Disk /dev/sda: 256GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 4194kB 32.2GB 32.2GB primary ext4 boot 2 32.2GB 256GB 224GB primary ext4 https://unix.stackexchange.com/questions/120221/gpt-or-mbr-how-do-i-know

2018-02-12 · 1 min · 56 words · -

redis info

redis info instantaneous_input_kbps 每秒读字节数 instantaneous_ops_per_sec 每秒处理指令数 instantaneous_output_kbps 每秒写字节数 keyspace_hitrate Rate of successful lookup of keys in the main dictionary keyspace_hits : 查找数据库键成功的次数。 keyspace_misses : 查找数据库键失败的次数。 latest_fork_usec : 最近一次 fork() 操作耗费的毫秒数。 lru_clock : 以分钟为单位进行自增的时钟,用于 LRU 管理 master_repl_offset The replication offset of master (in ms) mem_fragmentation_ratio : used_memory_rss 和 used_memory 之间的比率 migrate_cached_sockets Current amount of cached sockets rdb_changes_since_last_save : 距离最近一次成功创建持久化文件之后,经过了多少秒。

2018-02-12 · 1 min · 58 words · -

ssh config, sshd config

ssh config, sshd config ssh config public key, authorized_keys vim ~/.ssh/authorized_keys ~/.ssh/config https://linux.die.net/man/5/ssh_config https://www.openssh.com/legacy.html Host foo Hostname remote.server.com IdentityFile ~/.ssh/id_rsa.github IdentitiesOnly yes port 22 host 这一项 ssh config 的别名, 在命令行里可以直接 ssh foo hostname 远程主机的主机名或 ip IdentityFile 私钥路径 IdentitiesOnly, yes: ssh 连接时只使用 IdentityFile 配置的私钥, 忽略 ssh agent 提供的私钥 KexAlgorithms, the key exchange methods that are used to generate per-connection keys The IdentitiesOnly yes is required to prevent the SSH default behavior of sending the identity file matching the default filename for each protocol. If you have a file named ~/.ssh/id_rsa that will get tried BEFORE your ~/.ssh/id_rsa.github without this option. ...

2018-02-11 · 3 min · 466 words · -

Java tls, JSSE

Java tls, JSSE Java JSSE Java Secure Socket Extension JDK 中的 JSSE (javax.net.ssl) ,提供了对 SSL 和 TLS 的支持 SSL/TLS 协议 (RFC2246 RFC4346) 处于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。 SSL/TLS 记录协议 (SSL/TLS Record Protocol) ,它建立在可靠的传输层协议 (如 TCP) 之上,为上层协议提供数据封装、压缩、加密等基本功能。 SSL/TLS 握手协议 (SSL/TLS Handshake Protocol) ,它建立在 SSL/TLS 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等初始化协商功能。 从协议使用方式来看,又可以分成两种类型: SSL/TLS 单向认证,就是用户到服务器之间只存在单方面的认证,即客户端会认证服务器端身份,而服务器端不会去对客户端身份进行验证。 2.SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书。基本的过程和单向认证完全一样,只是在协商阶段多了几个步骤. 对称算法 (symmetric cryptography) : 就是需要双方使用一样的 key 来加密解密消息算法,常用密钥算法有 Data Encryption Standard (DES) 、triple-strength DES (3DES) 、Rivest Cipher 2 (RC2) 和 Rivest Cipher 4 (RC4) 。因为对称算法效率相对较高,因此 SSL 会话中的敏感数据都用通过密钥算法加密。 ...

2018-02-11 · 2 min · 362 words · -

MySQL view, MERGE, TEMPTABLE

MySQL view, MERGE, TEMPTABLE 数据库视图 数据库视图的创建是基于SQL SELECT query和JOIN的。视图和表很相似,它也包含行和列,所以可以直接对它进行查询操作。另外大多数的数据库同样允许进行UPADTE操作,但必须满足一定的条件。 MySQL View MySQL从5.x版本支持视图,并且基本符合SQL: 2003标准。 MySQL中执行查询视图的方式有一下两种: MySQL会合并输入的查询语句和视图的查询声明然后执行合并后的语句并返回结果。 MySQL会基于视图的查询声明创建一个temporary table, 当执行查询语句时会查询这张temporary table 如果创建视图的时候并未指定查询方式,MySQL会默认优先使用第一种,但如果视图的查询声明中的SELECT使用了聚合函数(MIN, MAX, SUM, COUNT, AVG, etc., or DISTINCT, GROUP BY, HAVING, LIMIT, UNION, UNION ALL, subquery.),那么视图查询会使用第二种方式。 Create View 创建MySQL视图可以使用CREATE VIEW声明: CREATE [ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}] VIEW [database_name].[view_name] AS [SELECT statement] ALGORITHM: MySQL有三种视图执行策略, 分别是MERGE, TEMPTABLE, UNDEFINED. 使用MERGE策略,MySQL会先将输入的查询语句和视图的声明语句进行合并,然后执行合并后的语句并返回。但是如果输入的查询语句中不允许包含一些聚合函数如: MIN, MAX, SUM, COUNT, AVG, etc., or DISTINCT, GROUP BY, HAVING, LIMIT, UNION, UNION ALL, subquery。同样如果视图声明没有指向任何数据表,也是不允许的。如果出现以上任意情况, MySQL默认会使用UNDEFINED策略。 ...

2018-02-11 · 1 min · 157 words · -

extundelete linux 数据恢复

extundelete linux 数据恢复 http://blog.51cto.com/ixdba/1566856 Linux下高效数据恢复软件extundelete应用实战 推荐 原创南非蚂蚁2014-10-22 17:58:11评论(8)11866人阅读 推荐: 10年技术力作: 《高性能Linux服务器构建实战Ⅱ》全网发行,附试读章节和全书实例源码下载! 作为一名运维人员,保证数据的安全是根本职责,所以在维护系统的时候,要慎之又慎,但是有时难免会出现数据被误删除的情况,在这个时候改如何快速、有效地恢复数据呢?本文我们就来介绍一下Linux系统下常用的几个数据恢复工具。 一、如何使用"rm -rf"命令 在Linux系统下,通过命令"rm -rf"可以将任何数据直接从硬盘删除,并且没有任何提示,同时Linux下也没有与Windows下回收站类似的功能,也就意味着,数据在删除后通过常规的手段是无法恢复的,因此使用这个命令要非常慎重。在使用rm命令的时候,比较稳妥的方法是把命令参数放到后面,这样有一个提醒的作用。其实还有一个方法,那就是将要删除的东西通过mv命令移动到系统下的/tmp目录下,然后写个脚本定期执行清除操作,这样做可以在一定程度上降低误删除数据的危险性。 其实保证数据安全最好的方法是做好备份,虽然备份不是万能的,但是没有备份是万万不行的。任何数据恢复工具都有一定局限性,都不能保证完整地恢复出所有数据,因此,把备份作为核心,把数据恢复工具作为辅助是运维人员必须坚持的一个准则。 二、extundelete与ext3grep的异同 在Linux下,基于开源的数据恢复工具有很多,常见的有debugfs、R-Linux、ext3grep、extundelete等,比较常用的有ext3grep和extundelete,这两个工具的恢复原理基本一样,只是extundelete功能更加强大,本文重点介绍extundelete的使用。 三、extundelete的恢复原理 在介绍使用extundelete进行恢复数据之前,简单介绍下关于inode的知识。在Linux下可以通过"ls –id"命令来查看某个文件或者目录的inode值,例如查看根目录的inode值,可以输入: [root@cloud1 ~]# ls -id / 2 / 由此可知,根目录的inode值为2。 在利用extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息 (根目录的inode一般为2) 来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块,间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。 四、 安装extundelete extundelete的官方网站是http://extundelete.sourceforge.net/ ,其目前的稳定版本是extundelete-0.2.4。,在安装extundelete之前需要安装e2fsprogs和e2fsprogs-libs两个依赖包。 e2fsprogs和e2fsprogs-libs安装非常简单,这里不做介绍。下面是extundelete的编译安装过程: [root@cloud1 app]#tar jxvf extundelete-0.2.4.tar.bz2 [root@cloud1 app]#cd extundelete-0.2.4 [root@cloud1 extundelete-0.2.4]#./configure [root@cloud1 extundelete-0.2.4]#make [root@cloud1 extundelete-0.2.4]#make install 成功安装extundelete后,会在系统中生成一个extundelete可执行文件。extundelete的使用非常简单,读者可以通过"extundelete -help"获得此软件的使用方法。 五、extundelete 用法详解 extundelete安装完成后,就可以执行数据恢复操作了,本节详细介绍下extundelete每个参数的含义。extundelete用法如下: extundelete -help 命令格式: extundelete [options] [action] device-file 其中参数 (options) 有: -version, -[vV],显示软件版本号。 -help,显示软件帮助信息。 -superblock, 显示超级块信息。 ...

2018-02-08 · 3 min · 476 words · -

install cloud9 ide on debian/ubuntu

install cloud9 ide on debian/ubuntu https://github.com/c9 git clone https://github.com/c9/core sdk cd sdk/ ./scripts/install-sdk.sh node server.js -p 8181 -l 0.0.0.0 -w /our/project/directory/-a : https://www.vultr.com/docs/install-the-cloud9-ide-on-debian-wheezy

2018-02-07 · 1 min · 23 words · -

AES

AES AES算法简介 AES的全称是Advanced Encryption Standard,意思是高级加密标准。它的出现主要是为了取代DES加密算法的,因为我们都知道DES算法的密钥长度是56Bit,因此算法的理论安全强度是2的56次方。但二十世纪中后期正是计算机飞速发展的阶段,元器件制造工艺的进步使得计算机的处理能力越来越强,虽然出现了3DES的加密方法,但由于它的加密时间是DES算法的3倍多,64Bit的分组大小相对较小,所以还是不能满足人们对安全性的要求。于是1997年1月2号,美国国家标准技术研究所宣布希望征集高级加密标准,用以取代DES。AES也得到了全世界很多密码工作者的响应,先后有很多人提交了自己设计的算法。最终有5个候选算法进入最后一轮: Rijndael,Serpent,Twofish,RC6和MARS。最终经过安全性分析、软硬件性能评估等严格的步骤,Rijndael算法获胜。 在密码标准征集中,所有AES候选提交方案都必须满足以下标准: 分组大小为128位的分组密码。 必须支持三种密码标准: 128位、192位和256位。 比提交的其他算法更安全。 在软件和硬件实现上都很高效。 AES密码与分组密码Rijndael基本上完全一致, Rijndael 分组大小和密钥大小都可以为128位、192位和256位。然而AES只要求分组大小为128位,因此只有分组长度为128Bit的Rijndael才称为AES算法。本文只对分组大小128位,密钥长度也为128位的Rijndael算法进行分析。密钥长度为192位和256位的处理方式和128位的处理方式类似,只不过密钥长度每增加64位,算法的循环次数就增加2轮,128位循环10轮、192位循环12轮、256位循环14轮。 ECB模式 (电子密码本模式: Electronic codebook) ECB是最简单的块密码加密模式,加密前根据加密块大小 (如AES为128位) 分成若干块,之后将每块使用相同的密钥单独加密,解密同理。 CBC模式 (密码分组链接: Cipher-block chaining) CBC模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密器加密。第一个明文块与一个叫初始化向量的数据块异或。 CBC模式相比ECB有更高的保密性,但由于对每个数据块的加密依赖与前一个数据块的加密所以加密无法并行。与ECB一样在加密前需要对数据进行填充,不是很适合对流数据进行加密。 CFB模式(密文反馈:Cipher feedback) 与ECB和CBC模式只能够加密块数据不同,CFB能够将块密文 (Block Cipher) 转换为流密文 (Stream Cipher) 。 注意:CFB、OFB和CTR模式中解密也都是用的加密器而非解密器。 CFB的加密工作分为两部分: 将一前段加密得到的密文再加密; 将第1步加密得到的数据与当前段的明文异或。 由于加密流程和解密流程中被块加密器加密的数据是前一段密文,因此即使明文数据的长度不是加密块大小的整数倍也是不需要填充的,这保证了数据长度在加密前后是相同的。 OFB模式 (输出反馈: Output feedback) OFB是先用块加密器生成密钥流 (Keystream) ,然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。 http://blog.csdn.net/songdeitao/article/details/17267443 https://blog.csdn.net/qq_28205153/article/details/55798628 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AESCodec { public static byte[] encrypt(String key, byte[] value) { try { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/Nopadding"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); return cipher.doFinal(value); } catch (Exception ex) { ex.printStackTrace(); } return null; } public static byte[] decrypt(String key, byte[] encrypted) { try { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/Nopadding"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] original = cipher.doFinal(encrypted); return original; } catch (Exception ex) { ex.printStackTrace(); } return null; } } https://blog.poxiao.me/p/advanced-encryption-standard-and-block-cipher-mode/ ...

2018-02-07 · 1 min · 134 words · -

jest

jest https://stackoverflow.com/questions/68956636/how-to-use-esm-tests-with-jest package.json use es module { "type": "module", "devDependencies": { "jest": "^29.7.0" }, "scripts": { "test": "node --experimental-vm-modules ./node_modules/.bin/jest" } } # run all test npm run test # run one test npm run test -- infoq.test.js

2018-02-07 · 1 min · 38 words · -

linux test disk io

linux test disk io time dd if=/dev/zero of=test.dbf bs=8k count=300000 oflag=direct http://blog.csdn.net/zqtsx/article/details/25487185

2018-02-07 · 1 min · 12 words · -

pixelbook, chromeos, developer mode, crouton

pixelbook, chromeos, developer mode, crouton developer mode https://www.theverge.com/2017/11/16/16656420/google-pixelbook-chromebook-development-linux-crouton-how-to hold the Esc, Refresh, and power button for a little while and the laptop reboots into Recovery Mode. Once you’re there, you hit Ctrl-D to boot into Developer Mode. 同时按esc refresh, poeer button, 直到出现 recovery mode, 就是提示插入u盘的界面, 这个时候按ctrl-d(不需要插入u盘, 插入u盘会自动进入恢复模式。) 开启开发者模式会清空数据。 crouton https://github.com/dnschneid/crouton sudo crouton -r list sudo cronton -t list sudo crouton -t xfce # ubuntu 16.4 sudo crouton -r xenial -t xfce sudo startxfce4 sudo enter-chroot startxfce4 sudo delete-chroot -a chromeos ubuntu 切换 ctrl+shift+alt+back ...

2018-02-04 · 1 min · 107 words · -

Java string hashing in Go

Java string hashing in Go https://www.manniwood.com/2016_03_20/fun_with_java_string_hashing.html func ActualHash(s string) int32 { var h int32 for i := 0; i < len(s); i++ { h = 31*h + int32(s[i]) } return h }

2018-01-31 · 1 min · 32 words · -

docker basic, commands

docker basic, commands commands # Docker images by tag docker rmi $(docker images --filter=reference="tag_name_0" -q) # Docker查看容器完整的容器 ID 和镜像 ID docker ps -a --no-trunc docker exec nexus3 cat /nexus-data/admin.password docker ps --filter"name=test-nginx" docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}" docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.Status}}\t{{.Names}}" docker ps --format "table {{.ID}}\t{{.IMAGE}}\t{{.CREATED}}\t{{.STATUS}}\t{{.NAMES}}" docker inspect xxx docker container update --restart=no <containername> # 修改 docker 容器为开机启动 docker container update --restart=always container_0 # 查看 volume 目录 docker info | grep "Docker Root Dir" 批量删除镜像 docker rmi $(docker images | grep "name0" | awk '{print $3}') docker rmi -f $(docker images | grep "name0" | awk '{print $3}') docker restart foo # 列出所有的容器 ID docker ps -aq # 停止所有的容器 docker stop $(docker ps -aq) # 删除所有的容器 docker image ls docker rm $(docker ps -aq) # 删除所有的镜像 docker rmi $(docker images -q) # 复制文件 docker cp mycontainer:/opt/file.txt /opt/local/ docker cp /opt/local/file.txt mycontainer:/opt/ docker port docker port :列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。 ...

2018-01-27 · 6 min · 1129 words · -