一条密码走天下——1pass4all简介

 

一条密码走天下

在这个互联网时代,网络账户大都是以用户名与密码组合的形式来鉴别的。由于 用户名一般是公开的,密码安全就显得至关重要了。设计一个好密码绝非易事,既要 足够强壮又要易记难猜。强密码的一个典型特征是熵(entropy)值高,通俗地说是 随机性强、规律性弱。那些用有规律或广为人知的数字序列或字串组成的密码固然不满足此条件, 一个长度不够、字符取值范围不广的密码在暴力破解面前同样弱不禁风。此外,有些密码 看似强壮,但如果与用户的个人信息紧密相联,也容易被知情人猜出或缩小检测范围。 事实上,绝大多数用户的密码要么不够强壮、要么容易猜测、要么(也是更多的)兼而有之。 去年底爆出的“密码门”事件再次佐证了这一点。 其实情有可原,强壮而难猜的密码通常也难记。有些用户挖空心思地想出强密码,为不增加 设计负担和记忆负担,往往又忍不住在多处网站重复使用,就此埋下安全隐患: 一旦由于某种原因(如此次“密码门事件”)密码被暴露,将殃及多个账户。故而 对密码的另一要求是,不同账户的密码应尽可能不相同、甚至不相关。只不过这样一来,密码 维护的难度更是倍增。正因如此,一些密码管理软件应需而生,它们的核心思想基本上都 很相似, 即以加密的形式为用户保存所有的账户和密码信息,用户仅需记住一条密码 (以下称为“主密码”),便可随时查询内藏的密码库。

本人使用密码管理工具颇有时日,包括KeePass、 1Password和LastPass, 始终觉得它们各有缺憾。KeePass在功能和界面上不如1Password,但后者价格不菲,且主要 在Mac平台(后虽支持Windows,但界面上远逊,且不支持Linux)。LastPass相比前二者的 优势是支持云同步,但将密码库置于远程服务器也非全无顾虑,比如TechCrunch曾刊载 过LastPass被破解的传闻。另外,虽然这些管理器都能帮用户生成 随机密码,但既难记又难敲。您可能会问:为什么要记呢,这不正是它们的意义所在吗? 话虽如此,然而不可否认,每登陆账户都要额外启动一个程序委实不便。不错,用户可以选择 让浏览器记住密码,或者利用这些管理器在浏览器上的插件来自动填写,但这种便利是以 安全为代价的。我以前的做法是,自定义一些隐秘的变量,然后通过某些规则或函数 进行变换而产生密码。作为一个程序员,我甚至写了一些脚本让此过程自动化。可惜该法 有个弊端:一旦离开自己的电脑,便可能因缺乏脚本或脚本运行环境而失效。 某日细思此事,想到JavaScript当是比一般的脚本更佳的选择,盖因凡有电脑处便有浏览器, 凡有浏览器处便能运行JavaScript。只要把JavaScript代码上传到某个网络空间,即可 予取予求。由于运行的过程与结果既不会在网络中传输,也不会在本地保存,有效保障了 密码的安全性。于是,很自然地开始把焦点集中在 小书签(bookmarklet)(或译为“书签工具”)上。所谓小书签, 无非是放在浏览器上的一种书签或网页上的一个超链接,与普通书签或超链接不同的是, 其网址(URL)不是某个网页地址,而是一段JavaScript代码。一旦被点击, 不会如普通书签那样进入到新网页,而会在当前网页中执行其内含的JavaScript程序。 此法方便、易安装、跨浏览器、且无干扰(unobtrusive) (注:不少人译为“无侵入”,但对应后者更贴切的英文当是unintrusive或non-intrusive)。

为避免重复劳动(即所谓的“重新发明轮子”),先在网上查寻是否已有现成产品可用, 结果发现SuperGenPass较好地满足了自己的要求。简单地说,SuperGenPass能将 一个主密码按不同的网站域名转换成不同的密码。不出意料,它采用的是MD5 算法。此算法可迅速将主密码与网络域名的组合单向(one-way)映射(计算机术语 是哈希(hash))为一个对输入敏感的、近似随机的字串。“单向”意味着 从输出难以反推输入,从而一条密码泄露不致暴露主密码;“敏感”意味着差异微小的输入 会导致差异极大的输出,从而一条密码泄露不会对其他密码造成危险;“近似随机”则意味 着输出字串可视为强密码。主意是不错,但于我并不新鲜。何况已知有人用SHA-1 开发了密码生成器,年前还见有国人用 MD5实现了类似功能。 SuperGenPass真正令我心动的地方是,它能就地生成密码——在用户于密码项中填入 主密码后,点击小标签便能用新产生的密码直接替换主密码。相比之下,原先在命令行中 运行脚本再将结果拷贝或重敲一遍的做法,既不安全也不方便。

事情变得简单多了。有了密码小标签,只需牢记一条密钥在心,便能自信地在不同的 网站以不同的强密码登陆,哪怕与这些密码素不谋面。不过传统的密码管理器 […]

国际标准书号ISBN的学习

国际标准书号(International Standard Book Number)简称ISBN,是国际通用的图书或独立的出版物(除定期出版的期刊)代码。出版社可以通过国际标准书号清晰地辨认所有非期刊书籍。一个国际标准书号只有一个或一份相应的出版物与之对应。新版本如果在原来旧版的基础上没有内容上太大的变动,在出版时也不会得到新的国际标准书号码。当平装本改为精装本出版时,原来相应的国际标准书号号码也应当收回。

ISBN由哪几部分构成?

中国标准书号由标识符“ISBN”和13位数字组成。其中13位数字分为以下五部分:

EAN UCC前缀 组区号 出版者号 出版序号 校验码 

ISBN各部分的含义是什么?

EAN•UCC前缀 国际物品编码(EAN•UCC)系统专门提供给国际ISBN管理系统的产品标识编码。中国的EAN.UCC前缀是978和979,目前使用的前缀为978,预留979前缀。

组区号 它由国际ISBN管理机构分配。国际ISBN管理机构为中国分配的组区号为“7”。此组区号设置范围内的允许出版量100 000 000。

出版者号 标识具体的出版者。其长度为2至7位,由中国ISBN管理机构设置和分配。

出版序号 由出版者按出版物的出版次序管理和编制。

校验码 中国标准书号数字的最后一位,采用模数10加权算法计算得出。书写或印刷中国标准书号时,标识符“ISBN”使用大写英文字母,其后留半个汉字空,数字的各部分应以半字线隔开。

例如:ISBN EAN•UCC前缀-组区号-出版者号-出版序号-校验码

示例:ISBN 978-7-115-14554-3

组区号、出版者号和出版序号共9位数字,但三部分中的每一部分的位数均是可变的。在组区号不变的情况下,设置出版者号后,即可推导出所含有的出版量:

出版者号设置范围/每一出版者号含有的出版量 

00~09/1 000 000 100~499/100 000 5000~7999/10000 80000~89999/1000 900000~989999/100 9900000~9999999/10

由上可知,出书量越大的出版社,出版者号越小。

校验码是怎么计算的?

校验码采用模数10的加权算法计算得出。下面以《中国准书号》国家标准中示例讲解一下校验码的计算方法。

以ISBN 978-7-5064-2595-7为例,其计算方法如下:

取ISBN前12位数字 取各位数字所对应的加权值 将各位数字与其相对应的加权值依次相乘 将乘积相加,得出和数 用和数除以模数10,得出余数 模数10减余数,所得差即为校验码 […]

千万别惹程序员

酷壳好久没有发娱乐性质的技术文章了,搞得气氛有点严肃了,考虑到程序员们都是比较严肃和容易较真的类书呆子的群体,所以,需要更新一个有娱乐性质的文章了。正好最近看到了两个比较有趣的图,在新浪微博上都得到了比较不错的反响,因此,更新到酷壳上来。

如果编程语言是一种刀

下面这个图是把编程语言看做是一种刀,那么会是什么样的。这个图我个人感觉很有意思。

对于这个图,最好不要解释,意会就好。不过,我却有点想不解风情,忍不住想解释一下。

C++,C,Pascal 都是瑞士军刀,说明是用来做细活的工具。C语言的刀上有个USB,说明是可以做硬件操作的。C++的刀是什么都有,说明C++是一种功能繁多的语言。(图中C++的那把瑞士军刀很强大,不要以为其是虚构的,这把刀是真实存在的,叫Wenger巨人刀,http://www.wenger.ch/giant-knife-wenger-swiss-army-knife (这个网页上有个Youtube视频,可以爬墙去看),淘宝上有卖的,价格在1万4左右。) Java/C#是一把塑料餐刀,这说明,Java和C#语言是带虚拟机的,而且其语法和使用并不像C++那么复杂,其泛型编程可以有很多种玩法,而Java和C#的泛型编程是比较单一的。 Python是把电锯,人挡杀人,佛招杀佛,威力很大,面对大型的物体的修整,比C++/C/Java什么的得心应手得多得多,但是对于一些精细的调优工作,明显不行。这和Ruby很像。 PHP没有MySQL,明显是被幽默了一把。不过最近对PHP的批评越来越多,不过,facebook的PHP的引擎HiPo已经很牛B了。 Perl是一本日本武士刀,是忍者玩的语言。 VB,就是一个玩具。你见过用塑料玩具勺当刀的吗?Haskell感觉是外星来的。呵呵 千万别惹程序员

下图一张昨天我公司内部被传递的图片。经典的SQL注入式攻击。千万别惹程序员

这是一个有技术含量的号牌遮挡。我们先不说其是不是能奏效,不过,这个创意相当的NB啊。当你驾车通过某些路口时,被摄像头捕捉到你的车牌,通过OCR变成文本,然后插入数据库,于是,上图的这个车牌就成了SQL注入。(不要以为车牌的OCR技术还不行,这项目技术已经非常成熟了,无论是国内还是国外)。这张图片就如同“Web开发中应该知道的事”中说的一样——永远不要相信用户的输入。

插曲:我昨天把这张图片放到微博,结果,被转了几万次,上了热门转发的top list和一些社会热点和明星八卦排在了一起。主要是被“@微博搞笑排行榜:  @全球潮流趣闻:  @实用小百科: @经典英文语录:  @当时我就泪奔了: @老榕: @全球经典音乐: @环球汽车搜罗: @怪诞心理行为学: @精彩电影: @互联网的那点事: @潮混搭:  @热门微博: @SinaAppEngine: ” 还有些什么体育记者,法律记者都转了, 这些转发了。这多少让我觉得有些诧异,这是很技术的一件事啊,怎么连什么电影,英文对白,汽车,音乐什么的都转了?我是相当的费解啊,我只能有两个认为——

简单的认为关心技术的人还是很多的。 复杂地认为国人是喜欢起哄的,不问为什么。

(全文完)

您可能也喜欢: 程序员眼中的编程语言 漫画:程序员的一生 我是怎么招聘程序员的 惹恼程序员的十件事 程序员版的凡客 无觅 相关文章 2009年12月24日 — 程序员眼中的编程语言 2012年04月27日 — 做个环保主义的程序员 2012年04月19日 — […]

【Android开发笔记】4.简单基站定位程序

前言

经过前面几节的学习,我们已经对Android程序的开发流程有了个大体的了解,为了提高我们的学习兴趣,在这一节我们将编写一个简单的基站定位程序。现在LBS(Location Based Service,基于位置的服务)移动应用相当流行(如:微信,切客,嘀咕,街旁等),基站定位是这类程序用到的关键性技术之一,我们来揭开它的神秘面纱吧。

在这一节里,我们会接触到事件、TelephonyManager、HTTP通信、JSON的使用等知识点。

声明

本系列文章不是教程,仅为笔记,如有不当之处请指正。

欢迎转载,转载请保留原出处:http://www.cnblogs.com/rayee

目录

一、设置界面

二、为按钮绑定事件

三、获取基站信息

四、获取经纬度

五、获取物理位置

六、显示结果

七、运行程序

八、总结

九、程序代码

正文

在Android操作系统下,基站定位其实很简单,先说一下实现流程:

调用SDK中的API(TelephonyManager)获得MCC、MNC、LAC、CID等信息,然后通过google的API获得所在位置的经纬度,最后再通过google map的API获得实际的地理位置。(google真牛!)

有同学会问:MNC、MCC、LAC、CID都是些什么东西?google又怎么通过这些东西就获得经纬度了呢?

我们一起来学习一下:

MCC,Mobile Country Code,移动国家代码(中国的为460);

MNC,Mobile Network Code,移动网络号码(中国移动为00,中国联通为01);

LAC,Location Area Code,位置区域码;

CID,Cell Identity,基站编号,是个16位的数据(范围是0到65535)。

了解了这几个名词的意思,相信有些朋友已经知道后面的事了:google存储了这些信息,直接查询就能得到经纬度了。(至于google怎么得到移动、联通的基站信息,这就不得而知了,反正google免费提供接口,直接调用就是)

下面开始动手。

一、设置界面

我们在上一节的程序的基础上进行开发,在DemoActivity的界面上实现这个功能。(没有代码的同学可点击这里下载,感谢yuejianjun同学的建议,以后我会在每一节的最后把例子打包提供下载)

首先我们将DemoActivity使用的布局修改一下:

第1行为TextView,显示提示文字;第2行为一个Button,触发事件;第3行、第4行分别显示基站信息和地理位置(现在为空,看不到)。

layout/main.xml文件内容如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >

<TextView […]

【Android开发笔记】3.编写第一个Android程序

前言

上一节我们通过一个Demo熟悉了Eclipse的基本使用、如何在模拟器和手机中运行以及如何打包成APK,但没具体编写代码,相信很多同学已经按耐不住了吧,这一节我们会动手编写代码来熟悉Android SDK的情况和JAVA的一些特性。

声明

本系列文章不是教程,仅为笔记,如有不当之处请指正。

欢迎转载,转载请保留原出处:http://www.cnblogs.com/rayee

正文

我们先了解一下编写程序都要涉及到哪些东西,熟悉一下SDK的基本组件,然后编写一个很简单的小程序。

一、分析Demo

在上一节建立的工程Demo下,打开src/com.android.demo下的DemoActivity.java,如下所示:

Demo程序的代码就只有13行,我们依次来分析一下:

package com.android.demo;/** 申明这个文件的代码属于包“com.android.demo” */

import android.app.Activity;/** 从Android SDK中引用Activity组件 */import android.os.Bundle;/** 从Android SDK中引用Bundle组件 */

public class DemoActivity extends Activity {/** 新建类DemoActivity,继承Activity,它就拥有Activity的特性了 */ /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) {/** 重写基类的同名函数,程序运行候创建Activity时被调用 */ super.onCreate(savedInstanceState);/** 调用基类的同名函数 */ setContentView(R.layout.main);/** 设置试图,用于显示界面 […]

Category

Archives