avatar1 avatar
@{[{user.name}]}
希腊·圣域
since February 1500
到底什么是HASH和HASH算法? 25 October 2016 00:00:29

讲到 哈希(HASH) 就必然会讲到 哈希算法哈希值

做程序的难免会经常听到看到HASH,印象中只知道HASH运算就是把一串字符转换成一种不重复的字符串,不论是文件,数字,字符串等等都可以进行哈希运算而得到一个唯一的哈希值。当然这样理解是有恰当或者不对的。

它们之间的关系非常简单

一段任意长度的数据 -> 哈希算法 -> 哈希值

哈希算法并不是一个特定的算法,而是一类算法的统称。常见的哈希算法实现有MD5SHA

哈希算法的定义

哈希算法也叫做散列算法,一般来说只要一个算法满足关系:f(data)=value, 输入任意长度的data数据,经过该算法运算后输出一个定长的数据value,同时这个过程是不可逆的,即无法由value推导出data,该算法就可以称作为一个哈希算法。如果对一组数据集做哈希处理,将得到的结果与原始数据集做一一映射后就可以得到一个哈希表。

哈希的两个重要性质

基于哈希的定义而已归纳总结为: 不可逆无冲突

关于哈希值的“重复”

哈希的性质之一为无冲突, 但根据哈希算法的定义,...运算后会输出一个定长的数据..., 即一个哈希算法的值域是有限的,然而输入的原始数据可以是任意长度任何的组合,即原始数据是无穷的,那么这样“重复”是不可以避免的,也就是说有可能两个不同的输入会得到相同的哈希值。那么这样就违背了我们的无冲突的性质,其实冲突是不可避免的,业界内称作 碰撞(Collision),所以这里的无冲突其实是指明:一个好的成熟的哈希算法会有较好的抗冲突性

安全性

总之,如果两个相同的原始输入数据,在同一个哈希算法下一定会得到相同的哈希值,但是哈希值相同的两个原始输入数据不一定相同,即 不可逆

一个简单的哈希算法的例子

以前看过一个简单的例子,讲的是如果你存储了很多歌曲,但是当你要添加新的歌曲的时候为了节省资源要检测一下是否已经存在了,但是同样的歌可以命名不一样的歌曲名字,为了避免这样的事情发生,我们通过计算(哈希算法)获得歌曲的大小(哈希值),通过与新歌的大小对比从而区分出是否该歌曲已经存在。当然不严格的讲计算文件大小的过程也可以称作一个哈希算法,只是这个哈希算法非常脆弱罢了。

总的来说

f(data) = value, 不可逆,抗冲突

Ubuntu随机启动脚本 13 August 2016 04:00:59

前段时间把web应用发布到了ubuntu服务器,除此之外该服务器上还运行着几个python的脚本,每次做完安全更新之后都需要重新启动web应用和脚本,就配了一个随机启动的脚本,今天整理出来吧。

有好几个办法可以实现这个目的,这里我使用的是LSB init script的办法

什么是LSB

LSB的全称是Linux Standard Base, 从名称可以看出它是一个标准化的东西,linux有很多的发型版本,每个发型版本不尽相同,如果没有一套标准的东西约束这么多发型版本,那么开发者无法保障他们可以写出一种脚本在任何发型版本上都没有问题,为解决这个问题一个标准LSB就诞生了,LSB实际上描述了一组任何发型版本必须实现的API。

什么是LSB Init Script

用标准的API设计的初始化脚本

如何使用LSB Init Script

直接举例来讲吧,例如我想我的机器reboot的时候自动运行~/sayHello.py 的脚本.

首先创建一个脚本文件 say_hello (没有拓展名)

#!/bin/bash

### BEGIN INIT INFO
# Provides:          say_hello
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Short description
# Description:          Full description
### END INIT INFO

start() {  
 nohup python ~/sayHello.py & #后台运行脚本
}

stop() {  
  #do nothing
}

case $1 in  
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac
Mac系统下安装Consolas字体 14 June 2016 10:00:40

Consolas是一套等宽的字体,属于无衬线字体,由Lucas de Groot设计。这个字体使用了微软的ClearType字型平滑技术,并随同windows Vista,Office 2007及Microsoft Visual Studio中发行。

默认情况下Mac系统是不带Consolas字体的, 需要手动安装,以下步骤是基于你的Mac已经配置了Homebrew(OS X下的套件管理器)前提下进行,如果没有配置,请先移步如何安装配置Homebrew

配置完成后依次输入以下命令:

$ brew install cabextract
$ cd ~/Downloads
$ mkdir consolas
$ cd consolas
$ curl -O http://download.microsoft.com/download/f/5/a/f5a3df76-d856-4a61-a6bd-722f52a5be26/PowerPointViewer.exe
$ cabextract PowerPointViewer.exe
$ cabextract ppviewer.cab
$ open CONSOLA*.TTF

出现安装字体的弹窗后点击“安装字体”即可完成。

参考链接:http://ikato.com/blog/how-to-install-consolas-font-on-mac-os-x.html

Ghost (nginx) 配置SSL 06 June 2016 22:00:13

因为服务端用的是unbuntu 14.04版本,跟官方网站中的配置例子有很多不一样的地方,导致最后还是花费了很多时间自己摸索了一下才算过关,整理出来方便大家参考吧。

假设你已经成功安装并运行Ghost到你自己的服务器(vps), 包括域名也解析成果。这里有个问题,配置Ghost的config.js的时候不要占用80和443端口

SSL证书

你需要准备两个文件,xx.crtxx.key,一个是你的证书,另一个是私匙,有很多SSL的供应商,你可以选一个合适你自己的,一般作为博客类站点都可以用Domain Validation直接在线签发SSL证书。

安装nginx

首先需要明确的是SSL的证书并不是直接配置到Ghost的,需要借助讲SSL证书装配到nginx,再由nginx来做路由代理分发http(s)请求到Ghost,所以你需要安装nginx:

sudo apt-get install nginx

加载SSL证书到nginx

在nginx目录下创建一个名为ssl的子目录: mkdir /etc/nginx/ssl

将你得到的 xx.crtxx.key 复制到ssl子目录,推荐使用 FileZilla 这个软件来连接你的vps进行文件复制

打开nginx的配置文件 sudo nano /etc/nginx/sites-available/default

添加以下内容:

server {  
    listen 80;
    server_name your_domain.com www.your_domain.com;
    return 301 https://$server_name$request_uri; #强制SSL
}
server {  
    listen 443 ssl;
    server_name your_domain.com www.your_domain.com;
    ssl_certificate      /etc/nginx/ssl/server.crt;
当前第 1页,一共 1页