当前位置:  编程技术>其它
本页文章导读:
    ▪(转载)经典的String Hash算法      设计高效算法往往需要使用Hash表,O(1)级的查找速度是任何别的算法无法比拟的。所谓Hash,一般是一个整数,通过某种算法,可以把一个字符串"pack"成一个整数,这个数称为Hash,当然,一个.........
    ▪Linux上文件的特殊权限SUID,SGID,SBIT详解      文件的特殊权限SGID, SUID..SBIT         大家都知道文件和目录的权限最常见的有三个.可读(r)..可写(w)..可执行(x)..它们的级别分别是4..2..1..我们有时也会发现有些文件 所.........
    ▪模板类中定义友元输出符      在模板类定义文件中声明友元template<typename T1>class A{   template<typename T>   friend ostream &operator <<(ostream &os, A<T> const &);};在成员定义文件中定义友元template&.........

[1](转载)经典的String Hash算法
    来源:    发布时间: 2013-11-15
设计高效算法往往需要使用Hash表,O(1)级的查找速度是任何别的算法无法比拟的。
所谓Hash,一般是一个整数,通过某种算法,可以把一个字符串"pack"成一个整数,这个数称为Hash,当然,一个整数是无法对应一个字符串的。
所以Hash函数是Hash表最核心的部分,对于一个Hash函数,评价其优劣的标准应为随机性或离散性,即对任意一组标本,进入Hash表每一个单元(cell)之概率的平均程度,因为这个概率越平均,两个字符串计算出的Hash值相等hash collision的可能越小,数据在表中的分布就越平均,表的空间利用率就越高。

Hash表的构造和冲突的不同实现方法对执行效率也有一定的影响.

DJBHash是一种非常流行的算法,俗称"Times33"算法。Times33的算法很简单,就是不断的乘33,原型如下

hash(i) = hash(i-1) * 33 + str[i]

Time33在效率和随机性两方面上俱佳。

其它常用字符串哈希函数有:
BKDRHash,APHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等。BKDRHash和APHash也是比较优秀的算法。当然要根据具体应用选择合适的Hash算法,比如字符集的考虑。

APHash作者Arash Partow有一个页面很有参考价值,包括了各种Hash的介绍及代码。

http://www.partow.net/programming/hashfunctions/#RSHashFunction

Blizzard使用的算法比较精妙,被称为"One-Way Hash",并且在Hash表中使用了三个哈希值(一个用来确定位置,另外两个用来校验)。

MD5等加密算法也属于hash,不过已被中国学者找到碰撞检测的破解算法

本文转自:http://www.cppblog.com/humanchao/archive/2012/12/26/196690.html

王海光 2013-01-07 16:29 发表评论

    
[2]Linux上文件的特殊权限SUID,SGID,SBIT详解
    来源:    发布时间: 2013-11-15

文件的特殊权限SGID, SUID..SBIT

        大家都知道文件和目录的权限最常见的有三个.可读(r)..可写(w)..可执行(x)..它们的级别分别是4..2..1..我们有时也会发现有些文件 所属主的权限上带有一个s的标志位.目录的所属组上也带有s标志位.很多人不理解这是为什么....下面我们举例来看一下...
         #ls -l  /usr/bin/passwd
         -rwsr-xr-x 1 root root 19876 Jul 17  2006 /usr/bin/passwd
         这个文件的所属主的x标志位上变成了s,这时称为set uid ..简写就是suid..其实这个文件属性也没有特殊的含义..当这个s标志位出现在一些脚本上时,它就有意义了...比方说我我们有一个脚本名为sum.sh.这个脚本的权限如下:
        -rwsrwxr-x 1 root root   117 Feb  6 20:46 sum.sh
         这个脚本的所属主和所属组为root.我们当然可以以root的用户的身份执行它..我们还可以看见它的所属主的标志位上有个s..其他人有读取和执行的 权限.假如我们现在有个普通用户名为redhat..现在切换到redhat..执行此脚本..表面上我们看是执行成功了..其实我们是借助root用户 的身份来执行它..而不是redhat..这就是suid的特性....
        下满我们来说下SGID,看了上面的SUID后很容易就知道所谓SGID就是将标志s加到gid的x标志位上..称为set gid.简称sgid..在这强调一下SUID我们一般用在文件上.特别是一些脚本上...SGID用在目录上最多...比方说我以root身份创建一个 目录a.给他加上sgid权限
        #mkdir a
        #chmod   2757  a
        #ls  -l
          drwxr-srwx 2 root root  4096 Feb  6 21:09  a
        因为我们给a目录其他人所具有的权限是可读,可写,可执行...当我们以redhat用户的身份切换到另外一个终端..进入a目录中,我们在此目录中创建一个目录b和一个文件c
        [redhat@station18 a]$ mkdir b
        [redhat@station18 a]$ touch c
        [redhat@station18 a]$ ls -l
        drwxrwsr-x 2 redhat root 4096 Feb  6 21:20 b
        -rw-rw-r-- 1    redhat root    0 Feb  6 21:20 c
        我们可以看到目录b和文件c的所属组都为root......当你将一个a目录置为sgid权限时候,如果其他人有读取,执行和写入的权限时,别人在此目 录中创建的任何文件和目录的所属组都为a目录的所属组..但所属主还是自己...这个会经常的用到....有一点大家得注意...就是任何人在a目录中创 建的东西.别人都可以删掉...这就是我们下面要讲到的SBIT....
        SBIT 全称Sticky Bit.但是它只对目录有效,对文件却是无效的,它的作用就是防止别人删除对方的资料...我们举例来说明...
      1..我用root用户登录创建一个目录名为test
       [root@station18 ~]# mkdir test
       [root@station18 ~]# chmod o+w test/
       [root@station18 ~]# ls -l
       drwxr-xrwx 2 root root  4096 Feb  6 21:30 test
      2..我们切换到redhat用户登录一个终端,创建一个目录a..
       [redhat@station18 test]$ mkdir a
      3.我们在切换到xiaoming用户登录一个终端,创建一个目录b...
       [xiaoming@station18 test]$ mkdir b
       [xiaoming@station18 test]$ ls  -l
       drwxrwxr-x 2 redhat   redhat   4096 Feb  6 21:32 a
       drwxrwxr-x 2 xiaoming xiaoming 4096 Feb  6 21:31 b
       我们可以以任何用户的身份进入test目录发现可以删除a和b目录...这样就乱了套...别人的目录你岂能随便删的...这时我们就需要将test目录加上SBIT权限了...
       [root@station18 ~]# chmod  1757  test/
       [root@station18 ~]# ls -l
       drwxr-xrwt 4 root root  4096 Feb  6 21:42 test
       我们在用别的用户登录进入test目录他就删不掉别人的资料了,系统会提示rm: cannot remove directory `a': Operation not permitted..意思是你权限不够....呵呵...这样别人就没辙了....我测试过成功的...
       下面我来说一下关于SUID SGID  SBIT权限的设定...
        SUID为4
        SGID为2
        SBIT为1
        我在上面设定一些文件或目录的权限你可能看不懂,,下面我来详细讲解...
        假如我们有个文件叫file.有一个目录叫test..file它的权限是644..test的权限是755
        1..如果我们想把file加上suid权限的话执行此命令
        #chmod  4755  file
        2..如果我们想把test目录加上sgid的话执行此命令
        #chmod  2755   test/
        3.如果我们想把test目录加上sbit权限的话执行此命令
        #chmod  1755   test/
        4..大家可以看得出来s与t都是取代x权限的...
        5..如果不想让test具备SUID和SGID权限执行此命令
        #chmod   7666  file
        #ls  -l
         -rwSrwSrwT 1 root root     0 Feb  6 21:49 file
        这里的S和T就代表空..不具备其他人执行的权限...7666也就是说用户,组,以及其他的人都不具备x的权限,除了root.任何人修改不了此文件...
        这儿我用数字代替给文件加一些 权限....我们也可以用别的方法.比方说..我们给file文件加上suid权限
        #chmod  u=rwxs,o=rx   file
        给test目录加上SGID权限和other可读取写入执行权限
        #chmod  g+s,o=wrx    test/
        给test目录加上SBIT权限和other可读取写入执行权限
        #chmod   o=rwxt   test/
 

原文:http://blog.chinaunix.net/u3/111913/showart_2182986.html



小果子 2013-01-07 19:51 发表评论

    
[3]模板类中定义友元输出符
    来源:    发布时间: 2013-11-15
在模板类定义文件中声明友元
template<typename T1>
class A
{
   template<typename T>
   friend ostream &operator <<(ostream &os, A<T> const &);
};
在成员定义文件中定义友元
template<typename T>
ostream &operator<< (ostream &os, A<T> const &)
{}

星哥 2013-01-07 21:25 发表评论

    
最新技术文章:
▪修改月光博客网站中PHP常用正则表达式中出现...
▪js正则判断非法字符限制输入
▪通过正则表达式删除空行的方法
▪一个好用的正则匹配电话号手机号邮箱网址的...
▪JS 正则表达式用法介绍
▪几个小例子教你如何实现正则表达式highlight高...
▪如何实现正则表达式的JavaScript的代码高亮
▪js 玩转正则表达式之语法高亮
▪PHP中过滤常用标签的正则表达式
▪js 正则表达式学习笔记之匹配字符串
▪使用正则表达式匹配[***]样式的字符串
▪史上最详细的js日期正则表达式分享
▪php+正则将字符串中的字母数字和中文分割
▪正则表达式不区分大小写以及解决思路的探索...
▪正则替换换行符和把 br 替换成换行符
▪正则表达式匹配不包含某些字符串的技巧
▪匹配form表单中所有内容的正则表达式
▪正则表达式(括号)、[中括号]、{大括号}的区别...
▪正则表达式中的"g"是什么意思附件参数g的用...
▪浅谈正则表达式(Regular Expression)
▪Python正则表达式的七个使用范例详解
▪正则表达式提取img的src
▪常用的正则表达式集锦
▪使用正则表达式找出不包含特定字符串的条目...
▪js正则表达式中的问号几种用法小结
▪正则表达式概述 什么是正则表达式 .
▪ajax对注册名进行验证检测是否存在于数据库...
▪js正则解析URL参数示例代码
▪几种常见攻击的正则表达式 iis7站长之家
▪几种常见攻击的正则表达式
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3