今天去营业厅取消了【固定电话服务】,发文纪念

说到固定电话,我是有很深的情感的

老家的固定电话

大概是在1992年的时候,老家(一个小镇)家里因为需要装了第一部电话机。
当前的固定电话,为了区别与再早之前电话都是接线员转接的,被称作程控电话。

印象中全镇除了镇政府,还有一些村委会之类的政府部门、以及一些商店,很少有家庭安装电话的,只有寥寥数家。当时电话业务归邮政局管理,电话业务是个肥差,想装一部电话,绝不是向现在出钱即可,我印象较为深刻,当时为了装这部电话,除了付出了7000多元的费用以外,我父亲还给负责安装电话的人送了两条红塔山。现在我无法评估当年(1992年)的7000多元以及两条红塔山,按当年购买力折算等同于现在多少钱,但当年对于我家也是极大极大的一笔开销。

上世纪(这么一说是不是显得特别久远)90年代,谁家有一部电话,在邻居眼中是艳羡的对象。而且左邻右舍有什么事情需要用电话的时候也要求到我家,我父母基本上都是每求必应,但是我却打心里不喜欢,倒不是因为浪费了电话费,而是感觉自己心爱的东西被他人分享。另外,尤为不喜的是很多邻居为了方便,在外边办事留的都是我家的电话,这样就时而有无关的电话打进来:“帮我找一下XXX”,于是父母就指使我跑腿去喊人……

后来家里有了’大哥大’,科学点的说话似乎应该叫做“模拟网移动电话”?但是固定电话依然是生活中不可分割的一部分。然后传呼机兴起与衰落,数字移动电话兴起,到现在的智能电话兴起,我还是习惯于往家里打固定电话。大概是前年的早些时候,父亲告诉我家里的固定电话已经拆机,颇有种怅然若失的感觉。这部电话(号码)已经陪伴我二十三四年,已经成为生命中深深的烙印。

家里的固定电话

而现在家里的电话,是我十多年前买了现在的这个房子之后安装的(当时应该是为了装宽带), 装这部电话的时候,我和爱人已经人手一部手机了。但是有时候父母总习惯于打我们的固定电话,聊一聊生活中的琐事。估计和我喜欢打家里固话是一样的心情吧。再有就是办各种事情,填各种表格的时候,往往都有固定电话一栏,于是我记不得我在多少个表格之上签下这个电话号码。还有一个极大的用途就是有时候移动电话总没电或者信号不好,于是我将我和爱人的移动电话都设置呼叫转移到这部电话上了。再剩下的就是找手机功能了,经常忘记手机放到哪里去,于是随手用固定电话拨一下手机号,循着铃声找到手机。

看吧其实, 固定电话还是很重要的吧?
但是随着家里电话号码越来越多,并且有些捆绑的语音套餐啥的用不了,我告诉父母尽量打我手机号。并且很少有其它朋友知道我的固话号码,所以它总是很少响起。每每它响起来,我总是充满期盼,是哪位久未联络的老友呢?结果电话中冰冷的电子人声:你好,你有一个法院传票逾期未处理,请按XXXX号码转人工咨询你好,这里是顺丰快递,你有一个重要的快件未领取...你好,...原本以为十次有九次是诈骗电话,算是很高的比例,可实际情况是十次有十次是诈骗电话。 我分析了一下这种情况,因为现在还用固定电话的,应该都是一些老人,而老人无疑是比较好骗的,所以成了骗子们重点关注的目标,于是我跟着中枪了。

尽管如此,我一直保留找固定电话好多年,只是因为自己说说不清道不明的一种情怀,当然到是啥原因也不好说,可能是因为我懒?于是今天骤然下定决心,我要取消固定电话业务,于是带着身份证来到营业厅,大概排了十分钟的队,签了一个字,然后固定电话瞬间就被停掉了。

就好比老家的电话被取消的时候一样,心中颇有种怅然若失的感觉。老家的号码陪了我二十多年,而这部号码陪了我们十多年,以后则只能是回忆了。写下这篇日志,纪念一下这两部固定电话号码吧。


This page is synchronized from the post: 今天去营业厅取消了【固定电话服务】,发文纪念

继续学习签名部分(公钥私钥)

经过之前的学习,对签名部分已经有了一定的了解

为了加深理解,继续搜索了一些文章学习了一下公钥私钥
虽然众说纷纭,但基本上表达的内容大同小异。

  • 公钥是公开的密钥
  • 私钥是私密的密钥

1:加密传输

加密解决的是保密性(Confidentiality)问题

如果A想发给B一段数据,不希望其它任何人看到,需要加密传输。
这时候,A用B的公钥加密数据,因为只有B的私钥才能解密数据,所以其它人即便获取密文也无法解出明文。
(总结:公钥加密,私钥解密)

2:数字签名

数字签名解决的是完整性(Integrity)以及真实性(Authenticity)问题

当我发布一段消息(数据),我生成数据HASH,并使用私钥和HASH生成签名,如果通过我的公钥能解密签名,并且数据的HASH值与签名解密出来的HASH相同,则证明这段数据是由我发出(真实性), 并且未经篡改(完整性)
(总结:私钥签名,公钥验证)

关于公钥和私钥

网上很多说法是公私钥是完全对称的,也就是说任何一个都可以用作公钥或者私钥。
但在steemit中是有所区别的,通过私钥可以计算出公钥(或者说公钥是由私钥生成的?),反之则不可以(或者说极为困难?)

以上为个人理解,因为尚处于学习过程中,不代表文中理解正确,仅供参考。
另外数学原理我就不去学了,反正我也学不明白,哭…
另外如有谬误,烦请诸位大神不吝赐教:)


This page is synchronized from the post: 继续学习签名部分(公钥私钥)

继续学习签名部分

在前一篇文章

诸位大神的回复给予我很大的帮助,尤其 @ripplerm 对我关心的几个问题给予了解答很阐述,万分感激。

这篇文章继续学习签名部分。

关于验证过程的摘要

首先继续那我摘出来的这段话
a signature consists of two numbers, R and S, and you use a private key to generate R and S, and if a mathematical equation using the public key and S gives you R, then the signature is valid.

结合steem,我对此的理解
签名逻辑上分为两部分,R和S,用私钥(和摘要)生成 校验的时候,用(公钥,S)带入数学公式,得到R,证明签名合法性。(摘要用不?)
对于我自己备注的摘要用不?我想了一晚上,技术上没想明白,但是从逻辑上,如果摘要不要,岂不是这个签名可以用在任何信息上了,这不科学,哈哈哈。所以一定是要的。

关于验证签名的合法性

想明白上述问题以后,那么对验证签名的合法性的流程有了更详细的了解。
结合xeroc的文章以及steem的实例
我理解验证签名的过程和生成签名的过程有些类似。

  • 拿到带签名的Transaction
  • 去掉签名部分,用剩余部分按照生成签名的流程来生成摘要(序列化,生成头部,生成摘要)
  • 取出签名的(S、R)以及Transaction 用户对应的public keys(公钥 steemd上查询或者用API获取)
  • 通过公钥和S算出R则签名合法,否则异常

代码以及测试

python-graphenelib 以及 python-steem 对签名验证部分进行了很好的封装
xeroc的文末提供一段验证签名的合法性的代码

1
2
3
4
5
from steembase import transactions
tx2 = transactions.Signed_Transaction(**tx)
tx2.deriveDigest("STEEM")
pubkeys = [PrivateKey(p).pubkey for p in wifs]
tx2.verify(pubkeys, "STEEM")

为此我特意从steemd取了个最新的 transactions

1
2
3
4
5
6
7
8
9
10
{'expiration': '2017-02-21T13:33:30',
'extensions': [],
'operations': [['vote',
{'author': 'austrin16',
'permlink': 'phobias',
'voter': 'robin.hood',
'weight': 10000}]],
'ref_block_num': 60790,
'ref_block_prefix': 2747450036,
'signatures': ['205520a31db2012ba14e78b8864819a2fd87de34314a10134b8d9ee83b8b4f879104cbfea79e65a814ad1f56a24b9a837e5b78872ec33ba7494eae17b240a4a9e5']}

分别用我的公钥以及robin.hood 的公钥去验证
然后,结果如我所料,我的公钥用来验证失败,robin.hood(voter) 的公钥验证通过


This page is synchronized from the post: 继续学习签名部分

你们那访问github.com有问题吗?

我这访问变成这个样子呢

哎,啥时候能把墙拆除呢


This page is synchronized from the post: 你们那访问github.com有问题吗?

求大神给讲讲签名部分

我在读这篇文章

Steem transaction signing in a nutshell

但是这部分有些看不懂
the back-end only accepts canonical signatures and we have no way of knowing if the signature that is going to be produced will be canonical

意思是系统只接收规范签名

然后它用一个自增变量循环生成一个K参数
然后在用这个k参数去签名
然后大致是这部分代码

1
2
3
4
5
6
# Make sure signature is canonical!
#
lenR = sigder[3]
lenS = sigder[5 + lenR]
if lenR is 32 and lenS is 32 :
# ........

有些搞不懂什么是规范签名(canonical signatures)?如何判断?
查了一下云山雾罩的

if lenR is 32 and lenS is 32 :
lenR和lenS 都等于32就是规范签名?

先谢过了。


This page is synchronized from the post: 求大神给讲讲签名部分

聊聊标签云

在前一篇文章

我提到除了书签,我比较期待的两个功能是中文标签标签云

关于标签云

TagCrowd.jpg

上一篇文章我们聊了中文标签,这里我们继续来聊标签云
所谓标签云,就是把常用的标签列出来,使用频度越高的标签越醒目。
这个常用于个人博客,便于直接找到目标文章

而steemit每个用户都有个blog页面,比如我的

我现在习惯于将自己日常生活中所思所想记录下来,同时也记录了学习中遇到的一些问题
但是我发现一个问题就是,如果我想找到很久以前的一篇文章,比如我写的用arduino+OLDE显示steemit个人资产信息的程序,那么我需要将我的博客从头翻到尾,才能找到我的文章。

试想在我的博客右侧列出我的常用标签
那么我在我的文章里加上合理的标签,这样,我要查找对应文章时,就可以通过点击标签进入和标签相关的文章
这样就缩小的搜索范围,极大方便了使用。

steem API 对标签云的支持

为此我特意看了一下steem api, 在历史记录中看到这条提交内容

那么这样就可以列出一个作者常用的标签了。
但是我试着使用了一下,返回为空,估计是我没用明白。

另外,我看了一下steemd上显示的也为空呢

至于通过指定标签查找用户文章,看这个数据结构,是支持通过作者和标签来查询文章列表的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* Defines the arguments to a query as a struct so it can be easily extended
*/
struct discussion_query {
void validate()const{
FC_ASSERT( filter_tags.find(tag) == filter_tags.end() );
FC_ASSERT( limit <= 100 );
}

string tag;
uint32_t limit = 0;
set<string> filter_tags;
set<string> select_authors; ///< list of authors to include, posts not by this author are filtered
set<string> select_tags; ///< list of tags to include, posts without these tags are filtered
uint32_t truncate_body = 0; ///< the number of bytes of the post body to return, 0 for all
optional<string> start_author;
optional<string> start_permlink;
optional<string> parent_author;
optional<string> parent_permlink;
};

结论

如此看来,steem API 已经具备了对标签云的支持(当然要那个API get_tags_used_by_author 能返回内容才行)
期待steemit早日完善并支持这个功能,一定是诸位所喜闻乐见的。


This page is synchronized from the post: 聊聊标签云

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×