Skip to content


[转]使用php,js来对内容做rsa加密

作者:virushuo 发表于 2009-12-27 18:12 最后更新于 2009-12-27 21:12 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://code.google.com/p/phpjsrsa/ 这是一个用于文本加密的库,主要用于http协议下的防窃听。一般来说,如果应用https协议可以有效的避免窃听。但有几种情况必须考虑。 (1) 主机同时有https和http协议,部分用户通过https协议访问,获得了保护。但也有用户通过http访问,这部分用户会遭到窃听。除非关闭http请求,全面转向https。 (2) 主机并没有https支持。 很多情况下,我们需要保证主机安全,最好的办法是将其混入数字森林中。即:这台主机输出的内容没有人能看得懂的,只由无意义的代码和数字组成。用户浏览这台主机,不会触发任何关键词扫描。甚至该主机连https协议都不使用,更凸显其低调本色。 换言之,一个网站如果把自己的内容都变成字母和数字的组合,且不使用https协议,那么他就是数字森林中的一片树叶,丝毫不引人注意。 我们的目标应该是传输过程中不引人注意,并非绝对的不可破解的安全。 因此这个库的工作流程是: 1 php对”内容”做rsa加密->将加密结果输出到页面上。 2 用户浏览页面,html代码中的”内容”被加密成数字形态。私钥可以直接输出在页面代码中,也可由用户输入一次,保存在cookie中。使用cookie会降低密钥泄露的危险,更加有效。 3 通过javascript在用户浏览器上将这些数字解密为内容。 4 通过javascript dom来把内容写回到页面上。用户即可浏览。 利用javascript解密,可以把运算负担分散到客户端上。窃听者如要窃听每一个页面的内容,则必须要 1 获得密钥 2 用密钥解密内容 在已知密钥情况下,如客户端的每个页面运算负担为 1 ,页面数量n ,那么窃听者获得密钥之后的运算负担为 1*n。 为了运算效率,使用小质数作为rsa的p,q,理论上窃听者可以通过因数分解算出密钥,其运算负载为k,注意k 远远大于1。 如果每个站点使用不同的密钥,共计m个站点,窃听者的运算负担为 m*k+1*n,且负载集中。 而,如果采用双向可逆加密方法,在得知算法的情况下,窃听者运算负载极小。如果在通过变换算法来增加难度,又无法做到通用,给用户正常浏览造成困难。使用rsa方法,算法是标准的,用户使用成本很低,窃听成本很高。 在项目代码中,我已经实现了这一目标。但仍然有效率问题。 目前问题: 1 在没有bcmath和gnumath函数的php主机上,php加密内容的运算效率很低。和bcmath差距几十倍。好在大部分情况下,主机都是有bcmath函数的。这个问题不严重。 2 JS的bigint运算效率很低,主要是powmod的效率低,而这是rsa解密最频繁的操作。 希望有兴趣的朋友加入这个项目。效率问题解决后,还需要port在一系列常用软件上。比如dabr或twitese等。 另外,需要的质数可以在 http://www.prime-numbers.org 找。 我放了一个demo在: http://blog.devep.net/rsatest/test.php 可以看html代码,里面是没有中文内容的。 update: 使用了 http://www-cs-students.stanford.edu/~tjw/jsbn/ 的大数运算库,效率提高很多。

Posted in JavaScript/DOM/XML, PHP, 技术.

Tagged with , , .


discuz论坛找出贴子中所有外部链接

最近风声很紧,要自查下bbs中包含外链的贴子,以下为sql语句。

SELECT pid, fid, tid, author, authorid, FROM_UNIXTIME( dateline ) AS time, subject, message FROM `cdb_posts` WHERE `message` REGEXP ‘.*http://[^bbs.domain.com].*’

REGEXP为排除自已的域名。 500W贴子执行时间在0.1秒左右,速度还算可以。 在phpmyadmin下搜出结果后,打开翻页下面的options,选中”完整文字”就可以看到完整贴子,再配合后台的禁止用户和删贴功能就可以把垃圾消灭了。

ps:如果执行速度比较慢可以加上pid的限制或者先导出到一个临时表中。

Posted in Discuz/Uchome/Ucenter, 其它.

Tagged with , .


linux下用mii-tool和ethtool 查看网线是否正确连接到网卡

输入mii-tool可以查看网线是否连接到网卡 #mii-tool

eth0: negotiated 100baseTx-FD, link ok

有时驱动可能不支持会出错下列错误 #mii-tool

SIOCGMIIPHY on ‘eth0’ failed: Operation not supported no MII interfaces found

可以使用ethtool查看 #ethtool eth0

Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000033 (51) Link detected: yes

Link detected: yes为正常no为失败

Posted in Linux 命令, 技术.

Tagged with , .


freebsd 7.2 内核优化提高负载

uname -a FreeBSD web_1 7.2-RELEASE FreeBSD 7.2-RELEASE #0: Fri May 1 07:18:07 UTC 2009 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64

nginx 0.7.63作反向代理

worker_processes 16; worker_rlimit_nofile 51200; events { use kqueue; worker_connections 51200; }

#tail /var/log/messages

Nov 25 21:47:11 web_1 kernel: kern.maxfiles limit exceeded by uid 88, please see tuning(7). Nov 25 21:47:12 web_1 kernel: kern.maxfiles limit exceeded by uid 80, please see tuning(7). Nov 25 21:47:44 web_1 last message repeated 27 times Nov 25 21:48:16 web_1 last message repeated 17 times Nov 26 09:04:01 web_1 kernel: Limiting open port RST response from 341 to 200 packets/sec

查看当前内核参数 #sysctl -a

kern.maxfiles: 12328 kern.maxfilesperproc: 11095 net.inet.icmp.icmplim: 200 net.inet.icmp.icmplim_output: 1 kern.ipc.somaxconn:128 net.inet.tcp.blackhole: 0 net.inet.udp.blackhole: 0 net.inet.udp.maxdgram: 9216 net.inet.tcp.sendspace: 32768 net.inet.tcp.recvspace: 65536 kern.ipc.nmbclusters: 25600 vfs.vmiodirenable: 1 net.inet.tcp.msl: 30000 net.inet.tcp.finwait2_timeout: 60000 net.inet.tcp.fast_finwait2_recycle: 0

优化内核,立即生效

#sysctl -w kern.maxfiles=65536 #sysctl -w kern.maxfilesperproc=65536 #sysctl -w net.inet.icmp.icmplim=500 #sysctl -w net.inet.icmp.icmplim_output=0 #sysctl -w kern.ipc.somaxconn=4096 #sysctl -w net.inet.tcp.blackhole=2 #sysctl -w net.inet.udp.blackhole=1 #sysctl -w net.inet.udp.maxdgram=65536 #sysctl -w net.inet.tcp.sendspace=65536 #sysctl -w net.inet.tcp.recvspace=65536 #sysctl -w kern.ipc.nmbclusters=32768 #sysctl -w net.inet.tcp.msl=2500 #sysctl -w net.inet.tcp.finwait2_timeout=600 #sysctl -w net.inet.tcp.fast_finwait2_recycle=1

以下三个参数可以在几分钟后大幅减少FIN_WAIT_2 等待数 net.inet.tcp.msl net.inet.tcp.finwait2_timeout net.inet.tcp.fast_finwait2_recycle

保存参数 #vi /etc/sysctl.conf

kern.maxfiles=65536 kern.maxfilesperproc=65536 net.inet.icmp.icmplim=500 net.inet.icmp.icmplim_output=0 kern.ipc.somaxconn=4096 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 net.inet.udp.maxdgram=65536 net.inet.tcp.sendspace=65536 net.inet.tcp.recvspace=65536 kern.ipc.nmbclusters=32768 net.inet.tcp.msl=2500 net.inet.tcp.finwait2_timeout=600 net.inet.tcp.fast_finwait2_recycle=1

#vi /boot/loader.conf

kern.ipc.nmbclusters=”102400″ kern.ipc.nmbufs=”409600″

这2个参数须重启服务器才能生效

查看tcp状态 #netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}’

FIN_WAIT_1 1610 FIN_WAIT_2 19 SYN_SENT 54 LAST_ACK 286 CLOSING 7 CLOSE_WAIT 2 SYN_RCVD 55 TIME_WAIT 213 ESTABLISHED 10928

#netstat -m

2284/25241/27525 mbufs in use (current/cache/total) 664/14398/15062/32768 mbuf clusters in use (current/cache/total/max) 664/14312 mbuf+clusters out of packet secondary zone in use (current/cache) 998/8109/9107/12800 4k (page size) jumbo clusters in use (current/cache/total/max) 0/0/0/6400 9k jumbo clusters in use (current/cache/total/max) 0/0/0/3200 16k jumbo clusters in use (current/cache/total/max) 5891K/67542K/73433K bytes allocated to network (current/cache/total) 0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters) 0/0/0 requests for jumbo clusters denied (4k/9k/16k) 0/0/0 sfbufs in use (current/peak/max) 0 requests for sfbufs denied 0 requests for sfbufs delayed 160 requests for I/O initiated by sendfile 0 calls to protocol drain routines

参考 http://wiki.freebsdchina.org/doc/s/sysctl/tuning http://blog.csdn.net/hjue/archive/2005/12/16/553703.aspx

Posted in *bsd.

Tagged with , , .


VMware下安装ubuntu7

原先硬盘里装的是xp和suse双系统,现想在xp下用vm虚拟ubuntu

一。删除suse 因为硬盘空间不够,先把suse的空间回收 分区魔术师一直报错,改用acronis disk director删除linux分区,格式化成ntfs。

二。修复xp启动 重启后会进入grub grub>root (hd0,2) grub>setup (hd0) 如果出现successed,就表示成功了。 grub>quit 然后再重启可进入xp。

修复mbr 1 下载 MbrFix 工具 http://www.linuxidc.com/upload/2007_11/07110411258868.rar 2 MBRFix工具修复系统启动项很方便,先进入cmd命令窗口,然后进入mbrfix工具所在的目录(用cd命令),然后输入命令 MbrFix /drive 0 fixmbr ,再确认一下即可。如果默认系统在D盘,则为MbrFix /drive 1 fixmbr ,依此类推 。

以后可以直接进入xp了

三。准备安装源 vmware版本为6.52 build-156735 ubuntu7.10的光盘

四。安装ubuntu

用VMware安装Ubuntu傻瓜书 http://soft.zdnet.com.cn/software_zone/2009/0219/1346542.shtml

我装了三次每次至82%时就卡着不动 据说是官方的镜像更新网速太慢,会卡个几小时 解决方法 !安装前先把网线拨了 !在vm settings中network Adapter的Connetc at power on 去掉勾 !在进入安装界面后,打开右上角的Network,把网络给关了 !语言不要选中文,用默认的英文

五。安装后设置 ubuntu 的root权限需用sudo来操作 1.修改ll命令

sudo vim ~/.bashrc

在命令模式下输入:set nu 显示行号,再输入:65跳到65行

#alias ll=’ls -l’

去掉前面的#注释

保存后用source生效

source ~/.bashrc

2.修改hostname

sudo hostname ubuntu sudo vi /etc/hostname

改成ubuntu

sudo vi /etc/hosts

改成ubuntu

3.关闭ipv6

sudo vim /etc/modprobe.d/aliases

将这一行 alias net-pf-10 ipv6 替换成下面二行 alias net-pf-10 off alias ipv6 off 重启

Posted in LINUX, 技术.

Tagged with , .


CentOs5.2安装tomcat

查看当前版本

java -version java version “1.4.2”

卸载1.4

rpm -qa |grep java java-1.4.2-gcj-compat-1.4.2.0-26jpp …… rpm -e java-1.4.2-gcj-compat-1.4.2.0-26jpp
====================== 2010-11-5更新 jdk6 6u2364位版 http://www.java.net/download/jdk6/6u23/promoted/b03/binaries/jdk-6u23-ea-bin-b03-linux-amd64-18_oct_2010-rpm.bin ======================

安装jdk1.6

wget http://www.java.net/download/jdk6/6u18/promoted/b04/binaries/jdk-6u18-ea-bin-b04-linux-i586-28_oct_2009-rpm.bin chmod 755 jdk-6u18-ea-bin-b04-linux-i586-28_oct_2009-rpm.bin\?e\=1257754475\&h\=106947ca348d71bef632eb95d717de05 ./jdk-6u18-ea-bin-b04-linux-i586-28_oct_2009-rpm.bin\?e\=1257754475\&h\=106947ca348d71bef632eb95d717de05

一路空格后健入yes

查看当前版本

java -version java version “1.6.0” OpenJDK Runtime Environment (build 1.6.0-b09) OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode)
======================= 2010-11-5更新 tomcat 新的版本及下载地址 http://labs.renren.com/apache-mirror/tomcat/tomcat-6/v6.0.29/bin/apache-tomcat-6.0.29.tar.gz =======================

安装tomcat

wget http://labs.xiaonei.com/apache-mirror/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz tar zxvf apache-tomcat-6.0.20.tar.gz mv apache-tomcat-6.0.20 /opt/tomcat

设置环境变量

vi /etc/profile JAVA_HOME=/usr/java/jdk1.6.0_20 export JAVA_HOME PATH=$PATH:$JAVA_HOME/bin export PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export CLASSPATH export JDK_HOME=${JAVA_HOME} export CATALINA_BASE=/opt/tomcat export CATALINA_HOME=/opt/tomcat

启动tomcat

source /etc/profile /opt/tomcat/bin/startup.sh

打开8080防火墙

iptables -A INPUT -p tcp -m tcp –dport 8080 -j ACCEPT service iptables save service iptables restart

http://localhost:8080

参考: https://blog.c1gstudio.com/archives/142 tomcat安全设置 https://blog.c1gstudio.com/archives/865 优化tomcat 内存 https://blog.c1gstudio.com/archives/276

Posted in Tomcat, 技术.

Tagged with .


导出索爱机型里面的通讯录至GPhone(G1/G2)

1备份 通讯录->备份 会在内存卡中生成一个contacts.vcf 路径为other\Backup\Contacts\contacts.vcf

2.将文件移至电脑 通过读卡器或usb

3.转换格式 vcf文件不能直接导入gmail。需要用到这个网站:http://labs.brotherli.ch/vcfconvert/ 选择Vcf文件地址,然后选择Gmail(CSV),然后点击下面的Convert就可以了。 Filter那个选项,第一个是只保留E-mail地址,第二个是只保留电话号码。看着勾吧。不勾也行.

如果导入的联系人没有名字或号码格式错误请按下列步骤操作 这次选择CSV格式,导出为contacts2.csv 用editplus打开contacts2.csv,用alt+c (块选择)复制第一行的名字 用excel打开gmail格式的csv文件contact.csv,粘贴刚才的数据至第一行name 将Section 1 – Mobile列的单元格格式设为文本 复制contacts2.csv中的手机号粘贴到Section 1 – Mobile列。 下一步导入gmail

4.导入gmail 现在打开Gmail,进入Contacts,在右上角的import. 上传并导入

5.gphone中同步 打开wifi或gprs 使用gmail账号登入 设置->数据同步->同步联系人 联系人->menu->显示组->所有联系人

参考:http://www.ooophone.com/viewthread.php?tid=1570

Posted in Android, 其它.

Tagged with .


在手机上(android)用SSH

新入了G1可以无时无刻使用学习linux了

它本身就带了个“超级终端”,但时输入ssh提示permission denied,应该是没root权限。 我通过电子市场下了个Connectbot 配合G1的硬键盘,使用起来和电脑差不多。

连接格式: username@hostip:port

键位: 右shift(向上键)为TAB ctrl为按一下轨迹球

Posted in Android.

Tagged with , , .


[转]WEB架构 – v.2008.163.com对新架构的尝试

先看看架构图: 163_nginx

实际上是app_nginx_squid_nginx的结构,nginx顶在最前面,具体有多少台我就不通告了,然后后面有比nginx更多的squid。

这个架构的特点是扩展了squid的功能,并且可以将很多请求绕过squid,实际应用时仍然出现一点问题,并在此系统的超级负荷下收获了不少经验。 为保商业秘密,只能告诉一个大概数字,此系统带图片的负荷每日在2亿-5亿之间,nginx代理全部机器加起来每秒处理的并发数日常总共是10000左右。 另说说每秒并发如何计算,跟据测试和对比,在web最前端每秒并发=系统的established/web server的keep alive。如果不是前端,那就不那么好算了,在这个系统中squid的established极低,不到10个,所以铁定不能从这个数字去判断了,可以使用squid的mgr:info来查看。 在这样的负荷下工作,平常运行时是没有很大的问题,就是在爆发地震性新闻那一小段时间难于招架。 于是我检查了系统,发现几个问题,并相应对系统进行了优化: 1、调整nginx的超时设置 我一般都会把nginx的超时时间设得稍微长一些,免得会抛出504错误,所以一般设为5分钟,但是在高负荷下,nginx总是能探测到很多的超时,经过测试,因为nginx前端堆积过多这些超时的请求,所以nginx的cpu占用率会上涨,最后nginx前端负荷过高,但后面一级的squid应该也负荷同样多的超时请求,但它却好得很。这样看来,nginx代理在处理这些超时请求上还有待提高。所以我调整了超时设置,将超时限定为5秒,这下负载就下来了不少。因为nginx超时后会重新选择一个后端请求,所以对访问影响不大,客户端同时也不会在一个超时请求下等待过长时间,这样就更为友好。 2、将图片用nginx缓存 鉴于nginx代理会出现问题,干脆把修改率不大的图片用nginx缓存起来,直接对外访问好了。于是使用proxy_store配置了一下,图片放到 /dev/shm内存里,然后写一个shell每小时把这些图片全删掉重取。放在内存里删除文件那是快啊,那么多图片一闪就删完了。 这样做下来,nginx的负载就很低了,处理同样的并发量,load average从2直降到了0.2,这时我觉得甚至只用单台nginx都可以工作。 ps: 在实际应用中也尝试了nginx的url hash模块,发现这个模块在有squid当机时,它并不会自动切换到另一台,就这个问题看来这个模块暂时还是不好使。

Posted in 技术, 网站架构.

Tagged with , .


如何在JPEG里隐藏文件

如何在一个JPEG文件里隐藏其他文件 具体做法总结如下:

将你要隐藏的文件用WinRAR打包。比如说打包成a.rar。 运行cmd进入命令行状态。 使用copy /b my.jpg + a.rar new.jpg将图片文件my.jpg和文件包a.rar合并成new.jpg。 这样,在通常状态下,这个文件就和一个图片文件一样,但是如果你用WinRAR来打开这个文件,就可以看到隐藏的那些文件。

Posted in Tools, 其它.

Tagged with .