C#计算文件MD5

2015/01/23

dotNET提供了 MD5CryptoServiceProvider 类,封装了计算MD5哈希值的相关算法。使得计算MD5相当方便。下面是使用该类计算文件MD5的一个例子:

 

而C++标准库中没有相应的库。相关的开源库有CryptoPP与hashlib++等开源库。可参考这里

 

 

 

Coding 2,852

Linton法则

2014/12/15

当我们在实现一个带有引用参数的函数时,可能会将该参数的地址存储在该函数作用域外的某个地方。如下代码所示:

MyObject* pObj = NULL;
MyObject tempObj;
void Fun(const MyObject& obj)
{
pObj = &obj;
}

tempObj.Release();

pObj.DoSomething();

当变量tempObj释放后,pObj仍保留了其地址。这将导致pObj变为空悬指针。

为了避免此类BUG出现,Mark Linton提出了如下法则:

函数中,禁止将引用参数的指针保存到函数作用域外。如果确有需要,需要将引用参数声明为指针参数

Coding 2,520

解决 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 问题

2014/10/22

最近重新配置vsftpd后,登入ftp后出现

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

根据问题提示查看了vsftpd.conf配置。

为禁止用户访问其他目录,以保证系统安全,做了如下设置:

chroot_local_user=YES

chroot_list_enable=NO

关于此配置项的具体说明可以戳这里

检查配置未发现其他问题。考虑是用户根目录的问题,将此ftp用户的根目录移动到 xx/webroot中,并在vsftpd.conf中配置此目录。问题依旧。

后查看svftpd的更新说明 ,发现从2.3.5版本以后,为保证服务器安全,根目录必须不可写。更改目录权限,解决此问题

chmod a-w xx/webroot

service vsftpd restart

解决 GoAgent install certificate failed, Please run proxy.py by administrator/root/sudo

2014/10/09

在Linux上使用goagent时可能会出现该问题。

出现该问题一般是由于root用户文件夹的权限不够,一些文件无法创建。

查看 root 下是否有.pki文件夹,若没有的话则创建之。并检查文件夹的权限。最好设置为777.

chmon 777  ~/.pki/

mkdir -p ~/.pki/nssdb
certutil -d ~/.pki/nssdb -N

 

Note 3,696

高精度计算之大数据相加

2014/06/14

§前言

 

高精度计算是算法较为基础的一部分。

由于现有计算编程语言的数据类型限制,对于大数据的存储能力与计算能力有限。故在需要进行大数据运算时,我们采用非常规的方法代替编程语言内置的算法,来进行计算。

大数据计算的一般思路为:将大数据拆分成多个小数据,使用编辑语言能够计算的小数据进行计算,再将小数据合并成大数据。

 

§大数加法

 

从自然数的加法开始学习。

首先要解决的是数据的存储。由于C++语言的长整型存储位数有限,存储大数据会出现溢出错误,我们将大数当作一个字符串进行存储。

然后将字符串分解成可以运算的小数,按照数据运算的一般规则来进行计算处理。

最后将多个小数组合成大数表示。

 

则对于大数加法有如下步骤:

  • 存储。使用字符串存储大数,将大数从高位到低位依次存放于字符数组中。这符合数据表示习惯
  • 转换。将字符数组从低位到高位依次转换成整型数字,并按下标从大到小依次存入整型数组(即将大数据的最低位向右对齐)。这符合数据计算习惯。
  • 计算。按下标从大到小(即大数据从低位到高位),依次进行单个整型的加法运算。如果满10则向高一个进1
  • 转换并存储。按下标的从小到大,将整型数组元素依次存入字符数组。

阅读全文…

Coding 2,432

sqlite3 时间函数

2014/05/07

sqlite中支持的时间和日期函数共有 5 个:

  1. date(timestring, modifier, modifier, …)
  2. time(timestring, modifier, modifier, …)
  3. datetime(timestring, modifier, modifier, …)
  4. julianday(timestring, modifier, modifier, …)
  5. strftime(format, timestring, modifier, modifier, …)

上述 5 个函数,都传入时间字符串 timestring 作为参数,后面接 0 到多个modifier 修饰符。 而 strftime 将 format 作为第一个参数,对时间进行重新格式化。

timestring

可以采用以下任何一种格式:

序号 时间字符串 实例
1 YYYY-MM-DD 2010-12-30
2 YYYY-MM-DD HH:MM 2010-12-30 12:10
3 YYYY-MM-DD HH:MM:SS.SSS 2010-12-30 12:10:04.100
4 MM-DD-YYYY HH:MM 30-12-2010 12:10
5 HH:MM 12:10
6 YYYY-MM-DDTHH:MM 2010-12-30 12:10
7 HH:MM:SS 12:10:01
8 YYYYMMDD HHMMSS 20101230 121001
9 now 2014-05-07

‘T’ 可以作为日期和时间的分隔符

modifier

  1. NNN days
  2. NNN hours
  3. NNN minutes
  4. NNN.NNNN seconds
  5. NNN months
  6. NNN years
  7. start of month
  8. start of year
  9. start of day
  10. weekday N
  11. unixepoch
  12. localtime
  13. utc

这些修饰符会按参数从左到右的顺序将时间进行相应的运算。

  • 前 6 个修饰符可以对时间进行加减时间段的运算。如 ‘2 days’ 表示在 timestring 的基础上再加 2 天,而 ‘-1 hours’ 表示在前时间的基础上减一个小时。
  • ‘start of’ 修饰符将时间转换成当月、当年、当天 有起始时间。如 ‘start of year’ 将时间转换为 ‘2013-01-01 00:00:00’
  • ‘weekday N’ 修饰符将当前时间前进到下一个星期N.(周日为星期0,周一为星期1).如今天是1月1日星期3,那么下一个星期4将是1月2日,下一个星期2将是1月8日。
  • ‘unixepoch’ 将 10 位数字的unix时间戳转换为相应的时间字符串。
  • ‘localtime’ 和 ‘utc’ 将时间在格林威治时间和本地时间之间进行转换

format

格式化字符串,使用’%’进行转义

  • %d 一月中的第几天,01-31
  • %f 带小数部分的秒,SS.SSS
  • %H 小时,00-23
  • %j 一年中的第几天,001-366
  • %J 儒略日数,DDDD.DDDD
  • %m 月,00-12
  • %M 分,00-59
  • %s 从 1970-01-01 算起的秒数
  • %S 秒,00-59
  • %w 一周中的第几天,0-6 (0 is Sunday)
  • %W 一年中的第几周,01-53
  • %Y 年,YYYY
  • %% % symbol

 

 

Note 2,449