1.linux joe命令详解
2.pg插件5人限制怎么解决
3.GnuPG命令行
4.PGPå·¥ä½åç
5.PGRelief的源码功能?
6.PostgreSQL内核Trigger的一生
linux joe命令详解
joe命令用于编辑文本文件,是行数一个功能强大的全屏幕文本编辑程序,操作的源码复杂度要比Pico高一点,但是行数功能较为齐全,joe一次可开启多个文件,源码每个文件各放在一个编辑区内,行数web html表格源码并可在文件之间执行剪贴的源码动作。
语法:joe [-asis][-beep][-csmode][-dopadding][-exask][-force][-help][-keepup][-lightoff][-arking][-mid][-nobackups][-nonotice][-nosta][-noxon][-orphan][-backpath<目录>][-columns<栏位>][-lines<行数>][-pg<行数>][-skiptop<行数>][-autoindent crlf linums overwrite rdonly wordwrap][+<行数>][-indentc<缩排字符>][-istep<缩排字符数>][-keymap<按键配置文件>][-lmargin<栏数>][-rmargin<栏数>][-tab<栏数>][要编辑的行数文件]</p>
参考例子:
利用joe编辑C语言源代码txt.c:
[root@linux ~]# joe txt.c
参数:
-columns 设置栏数
-help 执行程序时一并显示帮助
-lines 设置行数
-marking 在选取区块时,反白区块会随着光标移动
-nosta 程序执行时,源码不显示状态列
-pg 按”PageUp”或”PageDown”换页时,行数所要保留前一页的源码行数
-linums 在每行前面加上行号
pg插件5人限制怎么解决
通过调整配置或编写特定代码来解决pg插件的5人限制。 一、行数了解限制原因 pg插件的源码5人限制可能是由插件本身的设置或者服务器端的配置所设定的。在解决限制之前,行数需要明确这一限制的源码具体来源。 二、查找配置调整方法 对于大部分的插件,其限制人数都可以通过调整插件的配置文件来解决。你可以查看pg插件的官方文档或者相关的配置说明,寻找是否有关于人数限制的设定,并进行相应的调整。 三、编写代码解决限制 如果通过配置无法调整人数限制,那么可能需要通过编写代码来实现。这需要具备一定的编程能力,并且需要了解pg插件的源代码或相关接口。你可以尝试联系插件的开发者或者寻求技术社区的帮助,获取相关的小薇直播源码指导和建议。 四、注意事项 1. 在调整任何配置或编写代码之前,请确保你了解操作的风险,并备份好相关的文件和配置。 2. 如果你不确定如何操作,最好寻求专业人士的帮助,避免因为误操作导致系统出现问题。 3. 在解决限制的同时,也要考虑到系统的稳定性和安全性,不要盲目追求人数的增加而忽视了其他重要的因素。 以上内容是对如何解决pg插件5人限制的具体解释,希望对你有所帮助。GnuPG命令行
GnuPG (Gnu Privacy Guard) 是一个自由且开源的加密工具,版本为1.4.1。它由Free Software Foundation提供,且完全无任何保证。这个程序支持公钥加密,如RSA、RSA-E、RSA-S、ELG-E和DSA,以及对称加密算法,如3DES、CAST5、BLOWFISH、AES、AES、视频解析系统源码AES和TWOFISH。散列算法包括MD5、SHA1、RIPEMD、SHA、SHA和SHA。同时,它还支持压缩功能,如不压缩、ZIP、ZLIB和BZIP2。 在命令行操作中,gpg的基本语法是gpg [选项] [文件名],其默认行为根据输入数据自动决定。一些主要的命令和选项包括:-s, --sign [文件名]:用于生成一个文件的签名。
--clearsign [文件名]:生成一个明文签名的文件。
-b, --detach-sign:创建可分离的签名。
-e, --encrypt:加密数据。
-c, --symmetric:仅使用对称加密。
-d, --decrypt:解密数据(默认)。
--verify:验证签名。
--list-keys:列出密钥。
--export:导出密钥。
--import:导入或合并密钥。
范例中,如要为Bob签名并加密文件,可以使用命令:`-se -r Bob [file]`。出入库管理源码对于密钥管理,你可以通过`--edit-key`进行编辑,`save`保存并退出,`help`查看帮助信息,以及`fpr`、`list`等选项来查看和操作密钥信息。扩展资料
GnuPG(GNU Privacy Guard或GPG)是一个以GNU通用公共许可证释出的开放源码用于加密或签名的软件,可用来取代PGP。大多数gpg软件仅支持命令行方式,一般人较难掌握。由于gpg软件开放源代码,很难隐藏后门,因此比pgp等商业软件安全。PGPå·¥ä½åç
PGPæ¯ä¸ä¸ªåºäºRSAå ¬åå å¯ä½ç³»çé®ä»¶å å¯è½¯ä»¶ãå¯ä»¥ç¨å®å¯¹ä½ çé®ä»¶ä¿å¯ä»¥é²æ¢éææè é 读ï¼å®è¿è½å¯¹ä½ çé®ä»¶å ä¸æ°åç¾åä»è使æ¶ä¿¡äººå¯ä»¥ç¡®ä¿¡é®ä»¶æ¯ä½ åæ¥çãå®è®©ä½ å¯ä»¥å®å ¨å°åä½ ä»æªè§è¿ç人们é讯ï¼äºå 并ä¸éè¦ä»»ä½ä¿å¯çæ¸ éç¨æ¥ä¼ éå¯åãå®éç¨äºï¼å®¡æ çå¯å管çï¼ä¸ç§RSAåä¼ ç»å å¯çæåç®æ³ï¼ç¨äºæ°åç¾åçé®ä»¶ææç®æ³ï¼å å¯åå缩çï¼è¿æä¸ä¸ªè¯å¥½ç人æºå·¥ç¨è®¾è®¡ãå®çåè½å¼ºå¤§æå¾å¿«çé度ãèä¸å®çæºä»£ç æ¯å è´¹çã
å®é ä¸PGPçåè½è¿ä¸æ¢ä¸é¢è¯´çï¼;PGPå¯ä»¥ç¨æ¥å å¯æ件ï¼è¿å¯ä»¥ç¨PGP代æ¿UUencode;çæ;RADIX;;æ ¼å¼ï¼å°±æ¯MIME;ç;BASE;æ ¼å¼ï¼çç¼ç æ件ã
PGP;çåå§äººæ¯ç¾å½ç;Phil;Zimmermannãä»çåé æ§å¨äºä»æRSAå ¬åä½ç³»çæ¹ä¾¿åä¼ ç»å å¯ä½ç³»çé«é度ç»åèµ·æ¥ï¼å¹¶ä¸å¨æ°åç¾ååå¯å认è¯ç®¡çæºå¶ä¸æå·§å¦ç设计ãå æ¤PGPæ为å ä¹ææµè¡çå ¬åå å¯è½¯ä»¶å ã
PGPæ¯ä¸ç§ä¾å¤§ä¼ä½¿ç¨çå å¯è½¯ä»¶ãå å¯æ¯ä¸ºäºå®å ¨ï¼ç§å¯ææ¯ä¸ç§åºæ¬äººæãå¨ç°ä»£ç¤¾ä¼éï¼çµåé®ä»¶åç½ç»ä¸çæä»¶ä¼ è¾å·²ç»æ为çæ´»çä¸é¨åãé®ä»¶çå®å ¨é®é¢å°±æ¥ççªåºäºï¼å¤§å®¶é½ç¥éå¨Internetä¸ä¼ è¾çæ°æ®æ¯ä¸å å¯çãå¦æä½ èªå·±ä¸ä¿æ¤èªå·±çä¿¡æ¯ï¼ç¬¬ä¸è å°±ä¼è½»æè·å¾ä½ çéç§ã;è¿æä¸ä¸ªé®é¢å°±æ¯ä¿¡æ¯è®¤è¯ï¼å¦ä½è®©æ¶ä¿¡äººç¡®ä¿¡é®ä»¶æ²¡æ被第ä¸è 篡æ¹ï¼å°±éè¦æ°åç¾åææ¯ãRSAå ¬åä½ç³»çç¹ç¹ä½¿å®é常éåç¨æ¥æ»¡è¶³ä¸è¿°ä¸¤ä¸ªè¦æ±ï¼
ä¿å¯æ§ï¼Privacy)å认è¯æ§ï¼Authenticationï¼ã
RSAï¼Rivest-Shamir-Adlemanï¼ç®æ³æ¯ä¸ç§åºäºå¤§æ°ä¸å¯è½è´¨å æ°å解å设çå ¬åä½ç³»ãç®åå°è¯´å°±æ¯æ¾ä¸¤ä¸ªå¾å¤§çè´¨æ°ï¼ä¸ä¸ªå ¬å¼ç»ä¸çï¼ä¸ä¸ªä¸åè¯ä»»ä½äººãä¸ä¸ªç§°ä¸ºâå ¬åâï¼å¦ä¸ä¸ªå«âç§åâ(Public;key;&;Secretkey;or;Private;key)ãè¿ä¸¤ä¸ªå¯åæ¯äºè¡¥çï¼å°±æ¯è¯´ç¨å ¬åå å¯çå¯æå¯ä»¥ç¨ç§å解å¯ï¼åè¿æ¥ä¹ä¸æ ·ãå设ç²è¦å¯ä¿¡ç»ä¹ï¼ä»ä»¬äºç¸ç¥é对æ¹çå ¬åãç²å°±ç¨ä¹çå ¬åå å¯é®ä»¶å¯åºï¼ä¹æ¶å°åå°±å¯ä»¥ç¨èªå·±çç§å解å¯åºç²çåæãç±äºæ²¡å«äººç¥éä¹çç§åæ以å³ä½¿æ¯ç²æ¬äººä¹æ æ³è§£å¯é£å°ä¿¡ï¼è¿å°±è§£å³äºä¿¡ä»¶ä¿å¯çé®é¢ãå¦ä¸æ¹é¢ç±äºæ¯ä¸ªäººé½ç¥éä¹çå ¬åï¼ä»ä»¬é½å¯ä»¥ç»ä¹åä¿¡ï¼é£ä¹ä¹å°±æ æ³ç¡®ä¿¡æ¯ä¸æ¯ç²çæ¥ä¿¡ã认è¯çé®é¢å°±åºç°äºï¼è¿æ¶åæ°åç¾åå°±æç¨äºã
å¨è¯´ææ°åç¾ååå è¦è§£éä¸ä¸ä»ä¹æ¯âé®ä»¶ææâ(message;digest)ï¼åå°è®²å°±æ¯å¯¹ä¸å°é®ä»¶ç¨æç§ç®æ³ç®åºä¸ä¸ªè½ä½ç°è¿å°é®ä»¶âç²¾åâçæ°æ¥ï¼ä¸æ¦é®ä»¶æä»»ä½æ¹åè¿ä¸ªæ°é½ä¼ååï¼é£ä¹è¿ä¸ªæ°å ä¸ä½è çååï¼å®é ä¸å¨ä½è çå¯åéï¼è¿ææ¥æççï¼å°±å¯ä»¥ä½ä¸ºä¸ä¸ªç¾åäºãç¡®åå°è¯´PGPæ¯ç¨ä¸ä¸ªä½çäºè¿å¶æ°ä½ä¸ºâé®ä»¶ææâçï¼ç¨æ¥äº§çå®çç®æ³å«MD5(message;digest;5)ï¼MD5çæåºè æ¯Ron;Rivestï¼PGPä¸ä½¿ç¨ç代ç æ¯ç±Colin;Plumbç¼åçï¼MD5æ¬èº«æ¯å ¬ç¨è½¯ä»¶ãæ以PGPçæ³å¾æ¡æ¬¾ä¸æ²¡ææå°å®ãMD5æ¯ä¸ç§ååæ£åç®æ³ï¼å®ä¸åCRCæ ¡éªç ï¼å¾é¾æ¾å°ä¸ä»½æ¿ä»£çé®ä»¶èä¸åä»¶å ·æä¸æ ·çâç²¾åâã
åå°æ°åç¾åä¸æ¥ï¼ç²ç¨èªå·±çç§åå°ä¸è¿°çä½çâç²¾åâå å¯ï¼éå å¨é®ä»¶ä¸ï¼åç¨ä¹çå ¬åå°æ´ä¸ªé®ä»¶å å¯ãè¿æ ·è¿ä»½å¯æ被ä¹æ¶å°ä»¥åï¼ä¹ç¨èªå·±çç§åå°é®ä»¶è§£å¯ï¼å¾å°ç²çåæåç¾åï¼ä¹çPGPä¹ä»åæ计ç®åºä¸ä¸ªä½ç âç²¾åâæ¥åç¨ç²çå ¬å解å¯ç¾åå¾å°çæ°æ¯è¾ï¼å¦æ符å就说æè¿ä»½é®ä»¶ç¡®å®æ¯ç²å¯æ¥çãè¿æ ·ä¸¤ä¸ªè¦æ±é½å¾å°äºæ»¡è¶³ã
PGPè¿å¯ä»¥åªç¾åèä¸å å¯ï¼è¿éç¨äºå ¬å¼å表声ææ¶ï¼å£°æ人为äºè¯å®èªå·±ç身份ï¼å¨ç½ç»ä¸åªè½å¦æ¤äºï¼ï¼å¯ä»¥ç¨èªå·±çç§åç¾åãè¿æ ·å°±å¯ä»¥è®©æ¶ä»¶äººè½ç¡®è®¤å信人ç身份ï¼ä¹å¯ä»¥é²æ¢å信人æµèµèªå·±ç声æãè¿ä¸ç¹å¨åä¸é¢åæå¾å¤§çåºç¨åéï¼å®å¯ä»¥é²æ¢å信人æµèµå信件被éä¸ç¯¡æ¹ã
é£ä¹ä¸ºä»ä¹è¯´PGPç¨çæ¯RSAåä¼ ç»å å¯çæåç®æ³å¢ï¼å 为RSAç®æ³è®¡ç®éæ大å¨é度ä¸ä¸éåå å¯å¤§éæ°æ®ï¼æ以PGPå®é ä¸ç¨æ¥å å¯çä¸æ¯RSAæ¬èº«ï¼èæ¯éç¨äºä¸ç§å«IDEAçä¼ ç»å å¯ç®æ³ãæå 解éä¸ä¸ä»ä¹å«ä¼ ç»å å¯ï¼ç®åå°è¯´å°±æ¯ç¨ä¸ä¸ªå¯åå å¯ææï¼ç¶åç¨åæ ·çå¯å解å¯ãè¿ç§æ¹æ³ç代表æ¯DES(US;Fed eral;DataEncryption;Standard)ï¼ä¹å°±æ¯ä¹æ³å å¯ï¼å®ç主è¦ç¼ºç¹å°±æ¯å¯åçä¼ éæ¸ é解å³ä¸äºå®å ¨æ§é®é¢ï¼ä¸éåç½ç»ç¯å¢é®ä»¶å å¯éè¦ã
-1- : åå¤
æ大å©
lvchenyang_
ä½ç²ä¸
2楼
IDEA;æ¯ä¸ä¸ªæä¸å©çç®æ³ï¼ä¸å©ææè æ¯ETHåä¸ä¸ªçå£«å ¬å¸ï¼Ascom-Tech;AGã
éåä¸ç¨éçIDEAå®ç°ä¸ç¨åä»ä»¬äº¤çº³è´¹ç¨ãIDEAçå ï¼è§£ï¼å¯é度æ¯RSAå¿«å¾å¤ï¼æ以å®é ä¸PGPæ¯ç¨ä¸ä¸ªéæºçæå¯åï¼æ¯æ¬¡å å¯ä¸åï¼ç¨IDEAç®æ³å¯¹ææå å¯ï¼ç¶åç¨RSAç®æ³å¯¹è¯¥å¯åå å¯ãè¿æ ·æ¶ä»¶äººåæ ·æ¯ç¨RSA解å¯åºè¿ä¸ªéæºå¯åï¼åç¨IDEA解å¯é®ä»¶æ¬èº«ãè¿æ ·çé¾å¼å å¯å°±åå°äºæ¢æRSAä½ç³»çä¿å¯æ§ï¼åæIDEAç®æ³çå¿«æ·æ§ãPGPçåææä¸åå°±å¨è¿ä¸ç¹ä¸äºï¼ä¸ºä»ä¹RSAä½ç³»å¹´ä»£å°±æåºæ¥ï¼ä¸ç´æ²¡ææ¨å¹¿åºç¨å¢ï¼éåº¦å¤ªæ ¢ï¼é£ä¹PGPåæçå¦ä¸åå¨åªå¿å¢ï¼ä¸é¢æåè°PGPçå¯å管çã
ä¸ä¸ªæççå å¯ä½ç³»å¿ ç¶è¦æä¸ä¸ªæççå¯å管çæºå¶é å¥ãå ¬åä½å¶çæåºå°±æ¯ä¸ºäºè§£å³ä¼ ç»å å¯ä½ç³»çå¯ååé é¾ä¿å¯ç缺ç¹ãæ¯å¦ç½ç»hacker们常ç¨çæ段ä¹ä¸å°±æ¯âçå¬âï¼å¦æå¯åæ¯éè¿ç½ç»ä¼ é就太å±é©äºã举个ä¾åï¼NovellNetware;çèçæ¬ä¸ï¼ç¨æ·çå¯ç æ¯ä»¥ææå¨çº¿è·¯ä¸ä¼ è¾çï¼è¿æ ·çå¬è è½»æå°±è·å¾äºä»äººçå¯ç ãå½ç¶;Netware;4.1;ä¸æ°æ®å 头çç¨æ·å¯ç ç°å¨æ¯å å¯çäºã对PGPæ¥è¯´å ¬åæ¬æ¥å°±è¦å ¬å¼ï¼å°±æ²¡æé²çå¬çé®é¢ãä½å ¬åçåå¸ä¸ä»ç¶åå¨å®å ¨æ§é®é¢ï¼ä¾å¦å ¬åç被篡æ¹(Public;Key;Tampering)ï¼è¿å¯è½æ¯å ¬åå¯ç ä½ç³»ä¸æ大çæ¼æ´ï¼å 为大å¤æ°æ°æä¸è½å¾å¿«åç°è¿ä¸ç¹ãä½ å¿ é¡»ç¡®ä¿¡ä½ æ¿å°çå ¬åå±äºå®çä¸å»å±äºçé£ä¸ªäººã为äºæè¿ä¸ªé®é¢è¯´æ¸ æ¥ï¼æ举个ä¾åï¼ç¶åå说å¦ä½æ£ç¡®å°ç¨PGPå µä½è¿ä¸ªæ¼æ´ã
ä»¥ä½ åAliceçé信为ä¾ï¼åè®¾ä½ æ³ç»Aliceåå°ä¿¡ï¼é£ä½ å¿ é¡»æAliceçå ¬åï¼ä½ ä»BBSä¸ä¸è½½äºAliceçå ¬åï¼å¹¶ç¨å®å å¯äºä¿¡ä»¶ç¨BBSçEmailåè½åç»äºAliceãä¸å¹¸å°ï¼ä½ åAliceé½ä¸ç¥éï¼å¦ä¸ä¸ªç¨æ·å«Charlieçç¨æ·æ½å ¥BBSï¼æä»èªå·±ç¨Aliceçååçæçå¯å对ä¸çå ¬åæ¿æ¢äºAliceçå ¬åãé£ä½ ç¨æ¥åä¿¡çå ¬åå°±ä¸æ¯Aliceçèæ¯Charlieçï¼ä¸åçæ¥é½å¾æ£å¸¸ï¼å ä¸ºä½ æ¿å°çå ¬åçç¨æ·åæ¯âAliceâãäºæ¯Charlieå°±å¯ä»¥ç¨ä»æä¸çç§åæ¥è§£å¯ä½ ç»Aliceçä¿¡ï¼çè³ä»è¿å¯ä»¥ç¨Aliceçæ£çå ¬åæ¥è½¬åä½ ç»Aliceçä¿¡ï¼è¿æ ·è°é½ä¸ä¼èµ·çå¿ï¼ä»å¦ææ³æ¹å¨ä½ ç»Aliceçä¿¡ä¹æ²¡é®é¢ãæ´æçè ï¼ä»è¿å¯ä»¥ä¼ªé Aliceçç¾åç»ä½ æ
å ¶ä»äººåä¿¡ï¼å ä¸ºä½ ä»¬æä¸çå ¬åæ¯ä¼ªé çï¼ä½ 们ä¼ä»¥ä¸ºçæ¯Aliceçæ¥ä¿¡ã
é²æ¢è¿ç§æ åµåºç°çæ好åæ³æ¯é¿å 让任ä½å ¶ä»äººææºä¼ç¯¡æ¹å ¬åï¼æ¯å¦ç´æ¥ä»Aliceæä¸å¾å°å¥¹çå ¬åï¼ç¶èå½å¥¹å¨åéä¹å¤ææ æ³è§å°æ¶ï¼è¿æ¯å¾å°é¾çãPGPåå±äºä¸ç§å ¬åä»ç»æºå¶æ¥è§£å³è¿ä¸ªé®é¢ã举ä¾æ¥è¯´ï¼å¦æä½ åAliceæä¸ä¸ªå ±åçæåDavidï¼èDavidç¥éä»æä¸çAliceçå ¬åæ¯æ£ç¡®çï¼å ³äºå¦ä½è®¤è¯å ¬åï¼PGPè¿æä¸ç§æ¹æ³ï¼åé¢ä¼è°å°ï¼è¿éå设Davidå·²ç»åAlice认è¯è¿å¥¹çå ¬åï¼ãè¿æ ·Davidå¯ä»¥ç¨ä»èªå·±çç§åå¨Aliceçå ¬åä¸ç¾åï¼å°±æ¯ç¨ä¸é¢è®²çç¾åæ¹æ³ï¼ï¼è¡¨ç¤ºä»æ ä¿è¿ä¸ªå ¬åå±äºAliceãå½ç¶ä½ éè¦ç¨Davidçå ¬åæ¥æ ¡éªä»ç»ä½ çAliceçå ¬åï¼åæ ·Davidä¹å¯ä»¥åAlice认è¯ä½ çå ¬åï¼è¿æ ·Davidå°±æä¸ºä½ åAliceä¹é´çâä»ç»äººâãè¿æ ·AliceæDavidå°±å¯ä»¥æ¾å¿å°æDavidç¾è¿åçAliceçå ¬åä¸è½½å°BBSä¸è®©ä½ å»æ¿ï¼æ²¡äººå¯è½å»ç¯¡æ¹å®èä¸è¢«ä½ åç°ï¼å³ä½¿æ¯BBSç管çåã è¿å°±æ¯ä»å ¬å ±æ¸ éä¼ éå ¬åçå®å ¨æ段ã
æ人ä¼é®ï¼é£ä½ æä¹å®å ¨å°å¾å°Davidçå ¬åå¢ï¼è¿ä¸æ¯ä¸ªå æ鸡è¿æ¯å æèçé®é¢åï¼ç¡®å®æå¯è½ä½ æ¿å°çDavidçå ¬åä¹æ¯åçï¼ä½è¿å°±è¦æ±è¿ä¸ªæ£èè åä¸è¿æ´ä¸ªè¿ç¨ï¼ä»å¿ é¡»å¯¹ä½ ä»¬ä¸äººé½å¾çæï¼è¿è¦çåå¾ä¹ ï¼è¿ä¸è¬ä¸å¯è½ãå½ç¶ï¼PGP对è¿ç§å¯è½ä¹æé¢é²ç建议ï¼é£å°±æ¯ç±ä¸ä¸ªå¤§å®¶æ®éä¿¡ä»»ç人ææºææ å½è¿ä¸ªè§è²ãä»è¢«ç§°ä¸ºâå¯åä¾è âæâ认è¯æå¨âï¼æ¯ä¸ªç±ä»ç¾åçå ¬åé½è¢«è®¤ä¸ºæ¯ççï¼è¿æ ·å¤§å®¶åªè¦æä¸ä»½ä»çå ¬åå°±è¡äºï¼è®¤è¯è¿ä¸ªäººçå ¬åæ¯æ¹ä¾¿çï¼å 为ä»å¹¿æ³æä¾è¿ä¸ªæå¡ï¼ååä»çå ¬åæ¯å¾æå°é¾çï¼å 为ä»çå ¬åæµä¼ 广æ³ã è¿æ ·çâæå¨âéåç±é个人æ§å¶ç»ç»ææ¿åºæºæå å½ï¼ç°å¨å·²ç»æç级认è¯å¶åº¦çæºæåå¨ã
-1- : åå¤
æ大å©
lvchenyang_
ä½ç²ä¸
3楼
对äºé£äºé常åæ£ç人们ï¼PGPæ´èµæ使ç¨ç§äººæ¹å¼çå¯å转ä»æ¹å¼ï¼å 为è¿æ ·ææºçéå®æ¹æ´è½åæ åºäººä»¬èªç¶ç社ä¼äº¤å¾ï¼èä¸äººä»¬ä¹è½èªç±å°éæ©ä¿¡ä»»ç人æ¥ä»ç»ãæ»ä¹åä¸è®¤è¯ç人们è§é¢ä¸æ ·ãæ¯ä¸ªå ¬åæè³å°ä¸ä¸ªâç¨æ·åâ(User;ID)ï¼è¯·å°½éç¨èªå·±çå ¨åï¼æ好åå ä¸æ¬äººçEmailå°åï¼ä»¥å æ··æ·ã
注æï¼ä½ æå¿ é¡»éµå¾ªçä¸æ¡è§åæ¯ï¼å¨ä½ 使ç¨ä»»ä½ä¸ä¸ªå ¬åä¹åï¼ä¸å®è¦é¦å 认è¯å®ï¼ï¼ï¼æ è®ºä½ åå°ä»ä¹è¯±æï¼å½ç¶ä¼æè¿ç§è¯±æï¼ä½ é½ä¸è¦ï¼ç»å¯¹ä¸è¦ï¼ ç´æ¥ä¿¡ä»»ä¸ä¸ªä»å ¬å ±æ¸ éï¼ç±å ¶æ¯é£äºçèµ·æ¥ä¿å¯çï¼å¾æ¥çå ¬åï¼è®°å¾è¦ç¨ç人ä»ç»çå ¬åï¼æè èªå·±ä¸å¯¹æ¹äº²èªè®¤è¯ãåæ ·ä½ ä¹ä¸è¦é便为å«äººç¾å认è¯ä»ä»¬çå ¬åï¼å°±åä½ å¨ç°å®çæ´»ä¸ä¸æ ·ï¼å®¶éçæ¿é¨é¥åä½ æ¯åªä¼äº¤ç»ä¿¡ä»»ç人çã
ä¸é¢ï¼æ讲讲å¦ä½éè¿çµè¯è®¤è¯å¯åãæ¯ä¸ªå¯åæå®ä»¬èªå·±çæ è¯ï¼keyIDï¼ï¼keyIDæ¯ä¸ä¸ªå «ä½åå è¿å¶æ°ï¼ä¸¤ä¸ªå¯åå ·æç¸åkeyIDçå¯è½æ§æ¯å å亿åä¹ä¸ï¼
èä¸PGPè¿æä¾äºä¸ç§æ´å¯é çæ è¯å¯åçæ¹æ³ï¼âå¯åæ纹â(key"s;fingerprint)ãæ¯ä¸ªå¯å对åºä¸ä¸²æ°åï¼åå ä¸ªå «ä½åå è¿å¶æ°ï¼ï¼è¿ä¸ªæ°åéå¤çå¯è½å°±æ´å¾®ä¹å ¶å¾®äºãèä¸ä»»ä½äººæ æ³æå®çæä¸ä¸ªå ·ææ个æ纹çå¯åï¼å¯åæ¯éæºçæçï¼ä»æ纹ä¹æ æ³åæ¨åºå¯åæ¥ãè¿æ ·ä½ æ¿å°æ人çå ¬ååå°±å¯ä»¥åä»å¨çµè¯ä¸æ ¸å¯¹è¿ä¸ªæ纹ï¼ä»è认è¯ä»çå ¬åãå¦æä½ æ æ³åAliceéçµè¯çè¯ï¼ä½ å¯ä»¥åDavidéçµè¯è®¤è¯Davidçå ¬åï¼ä»èéè¿David认è¯äºAliceçå ¬åï¼è¿å°±æ¯ç´æ¥è®¤è¯åé´æ¥ä»ç»çç»åã
è¿æ ·åå¼åºä¸ç§æ¹æ³ï¼å°±æ¯æå ·ä¸å人ç¾åçèªå·±çå ¬åæ¶éå¨ä¸èµ·ï¼åéå°å ¬å ±åºåï¼è¿æ ·å¯ä»¥å¸æ大é¨å人è³å°è®¤è¯å ¶ä¸ä¸ä¸ªäººï¼ä»èé´æ¥è®¤è¯äºä½ çå ¬åãåæ ·ä½ ç¾äºæåçå ¬åååºè¯¥å¯åç»ä»ï¼è¿æ ·å°±å¯ä»¥è®©ä»å¯ä»¥éè¿ä½ è¢«ä½ å ¶ä»æå认è¯ãæç¹ææå§ï¼åç°å®ç¤¾ä¼ä¸äººä»¬ç交å¾ä¸æ ·ãPGPä¼èªå¨ä¸ºä½ æ¾åºä½ æ¿å°çå ¬åä¸æåªäºæ¯ä½ çæåä»ç»æ¥çï¼é£äºæ¯ä½ æåçæåä»ç»æ¥çï¼åªäºåæ¯æåçæåçæåä»ç»çâ¦â¦å®ä¼å¸®ä½ æå®ä»¬å为ä¸åç信任级å«ï¼è®©ä½ åèå³å®å¯¹å®ä»¬çä¿¡ä»»ç¨åº¦ãä½ å¯ä»¥æå®æ人æå å±è½¬ä»å ¬åçè½åï¼è¿ç§è½åæ¯éç认è¯çä¼ éèéåçã
转ä»è®¤è¯æºå¶å ·æä¼ éæ§ï¼è¿æ¯ä¸ªæ趣çé®é¢ãPGPçä½è Phil;Zimmermannã
æå¥è¯ï¼;â;ä¿¡èµä¸å ·æä¼ éæ§ï¼ææ个æç¸ä¿¡å³ä¸æè°çæåãå¯æ¯ä»æ¯ä¸ªè®¤å®æ»ç»ä¸æè°çå»çï¼å¯å¾æ¾ç¶æ并ä¸è®¤ä¸ºæ»ç»å³ä¸æè°ãâ
å ³äºå ¬åçå®å ¨æ§é®é¢æ¯PGPå®å ¨çæ ¸å¿ï¼æå¨è¿éå°±ä¸ç»è¯´äºãåä¼ ç»åå¯åä½ç³»ä¸æ ·ï¼ç§åçä¿å¯ä¹æ¯å³å®æ§çãç¸å¯¹å ¬åèè¨ï¼ç§åä¸åå¨è¢«ç¯¡æ¹çé®é¢ï¼ä½åå¨æ³é²çé®é¢ãRSAçç§åæ¯å¾é¿çä¸ä¸ªæ°åï¼ç¨æ·ä¸å¯è½å°å®è®°ä½ï¼PGPçåæ³æ¯è®©ç¨æ·ä¸ºéæºçæçRSAç§åæå®ä¸ä¸ªå£ä»¤(pass;phase)ãåªæéè¿ç»åºå£ä»¤æè½å°ç§åéæ¾åºæ¥ä½¿ç¨ï¼ç¨å£ä»¤å å¯ç§åçæ¹æ³ä¿å¯ç¨åº¦åPGPæ¬èº«æ¯ä¸æ ·çãæ以ç§åçå®å ¨æ§é®é¢å®é ä¸é¦å æ¯å¯¹ç¨æ·å£ä»¤çä¿å¯ãå½ç¶ç§åæ件æ¬èº«å¤±å¯ä¹å¾å±é©ï¼å ä¸ºç ´è¯è æéè¦çåªæ¯ç¨ç©·ä¸¾æ³è¯æ¢åºä½ çå£ä»¤äºï¼è½è¯´å¾å°é¾ä½æ¯ç«æ¯æ失äºä¸å±å®å ¨æ§ãå¨è¿éåªç¨ç®åå°è®°ä½ä¸ç¹ï¼è¦åä»»ä½éç§ä¸æ ·ä¿èä½ çç§åï¼ä¸è¦è®©ä»»ä½äººææºä¼æ¥è§¦å°å®ã
PGPå¨å®å ¨æ§é®é¢ä¸çç²¾å¿èèä½ç°å¨PGPçå个ç¯èãæ¯å¦æ¯æ¬¡å å¯çå®é å¯åæ¯ä¸ªéæºæ°ï¼å¤§å®¶é½ç¥é计ç®æºæ¯æ æ³äº§ççæ£çéæºæ°çãPGPç¨åºå¯¹éæºæ°ç产çæ¯å¾å®¡æ çï¼å ³é®çéæºæ°åRSAå¯åç产çæ¯ä»ç¨æ·ç§é®ççæ¶é´é´éä¸åå¾éæºæ°ç§åçã对äºç£çä¸ç;randseed.bin;æ件æ¯éç¨åé®ä»¶åæ ·å¼ºåº¦çå å¯çãè¿ææå°é²æ¢äºä»äººä»ä½ çrandseed.binæ件ä¸åæåºä½ çå å¯å®é å¯åçè§å¾æ¥ã
å¨è¿éææä¸ä¸PGPçå å¯åé¢å缩å¤çï¼PGPå æ ¸ä½¿ç¨PKZIPç®æ³æ¥å缩å å¯åçææãä¸æ¹é¢å¯¹çµåé®ä»¶èè¨ï¼å缩åå å¯åç»è¿7bitsç¼ç å¯ææå¯è½æ¯æææ´çï¼è¿å°±èçäºç½ç»ä¼ è¾çæ¶é´ãå¦ä¸æ¹é¢ï¼ææç»è¿å缩ï¼å®é ä¸ç¸å½äºç»è¿ä¸æ¬¡åæ¢ï¼ä¿¡æ¯æ´å æä¹±æ ç« ï¼å¯¹æææ»å»çæµå¾¡è½åæ´å¼ºãPGPä¸ä½¿ç¨çPKZIPç®æ³æ¯ç»è¿åä½è åæçãPKZIPç®æ³æ¯ä¸ä¸ªå ¬è®¤çå缩çåå缩é度é½ç¸å½
好çå缩ç®æ³ãå¨PGPä¸ä½¿ç¨çæ¯PKZIP;2.0çæ¬å ¼å®¹çç®æ³ã
好äºï¼å ³äºPGPå®å ¨æ§çé®é¢æä¼å¨ãPGPçå®å ¨æ§ãä¸æä¸ä¸é¨ä»ç»ãæä¸é¢è®²äºè¿ä¹å¤åªæ¯ä¸ºäºè®©å¤§å®¶ç¥éPGPä¼æ¯é常å®å ¨çï¼åªè¦ä½ èªå·±éµå¾ªæ£ç¡®ç使ç¨æ¹æ³ãå ³äºPGPçå®è£ å使ç¨è¯·åèãPGP;2.6.3içå®è£ ä¸ä½¿ç¨ãä¸æãå¦æå¨çè±æææ¡£æ¶æäºä¸å¤ªæç½çè¯æ±ï¼è¯·è¯è¯è½ä¸è½ä»ãPGPåè¯è§£éãä¸æä¸æ¾å°çº¿ç´¢ãPGP;2.6.3iæ¯ææ¨è大家使ç¨çPGPçæ¬ï¼æå ³è¿ä¸ªçæ¬ç详ç»é®é¢è¯·åè§ãPGPi;é®çéãä¸æã
å¨ä»å¤©çInternetä¸éå¤å¯è§ç¨PGPç¾åçæç« ï¼PGPççæ¬ä¹å¨é£å¿«å°æ´æ°ï¼æ®è¯´PGP;3.0;åæå 个æå°±è¦æ¨åºäºãä¸çä¸è¶æ¥è¶å¤ç人们å¨ä½¿ç¨PGPï¼æ们ä¸å½äººä¹åºè¯¥éè§ä¿æ¤èªå·±åæ³çç§å¯æãæç¿»è¯æ´çè¿å ç¯æç« å°±æ¯ä¸ºäºå¨å½å å®£ä¼ æ¨å¹¿PGPç使ç¨ã尽管å®è¿æ¯ä¸ªæ°çäºç©ï¼å¯æ¯æ们è¦çå°å¨ç½é 空é´ï¼CyberSpaceï¼ä¸å®è¯å®è½è¿ éæé¿èµ·æ¥ï¼ä¸å½è½ç¶èµ·æ¥æï¼ä½æ¯ç¾å½ä¹å·®ä¸å¤ªå¤ï¼æ们åºè¯¥è¿å¤´èµ¶ä¸ã
PGRelief的功能?
丰富的代码检查功能
PGRelief对C/C++的源程序进行检查,既能指出单纯的编码失误,也能指出复杂的逻辑错误。此外,对不正确的内存访问、内存泄漏、内存释放以及性能恶化等问题也能进行检查。同时,能够对已确定不是问题的地方不再重复检查,以此来减轻开发人员的负担。
代码评审辅助功能
n
可以通过PGRelief的GUI查看检查结果
n
可以选择输出认为需要的检查结果
n
屏蔽不需要的检查结果
n
对关注的检查点进行自由分组
提供了易用的用户接口,可以高效率地进行各种检查的验证作业。
例如,可以按照检查的java实时通讯源码类别(可靠性、可维护性、可移植性、效率性等),或检查点编号进行过滤,从而仅显示希望调查的检查结果。另外,通过简单的操作就可以显示对应的代码内容及检查点的含义、处理方法等。
编码规范检查功能
检查源程序是否符合以下编码规范的要求,并指出违反的相应规范之处。通过确保源程序符合这些规范,使程序品质具备坚实基础。
n
IPA/SEC
n
MISRA-C(//)/MISRA-C++()(可选产品)
n
ISO
复杂度度量功能
不仅对程序中的问题进行检查,还可以对程序的控制结构等指标进行测量。基于该测量结果,可以计算出函数的复杂度。将这些复杂度作为程序开发的指标,可以推进更高品质的软件开发。
n
对十余种度量值进行计算
包括对代码行数、注释以外行数、最大嵌套层数、MaCabe的TYPE1和TYPE2两种复杂度等多种程序复杂度度量值。
注:McCabe是什么?
McCabe是基于对程序拓扑结构复杂度的分析的一种度量方法。包括TYPE1圈复杂度和TYPE2基本复杂度。
n
可以自由设定各个度量值的阈值
及时避免引入过分复杂的代码,有效降低程序整体复杂度。
命名规则检查功能
可以对函数名或变量名的命名规则进行定义和检查。
统计功能
可以对项目中的所有源代码的检查结果数据进行统计,并保存到文件。
PostgreSQL内核Trigger的一生
本文简要介绍 PostgreSQL 数据库的 Trigger 从创建、存储、触发、执行、修改到删除的过程,贯穿 Trigger 的一生。
文中引用的函数、结构体来源于 PG 源码,分支为 REL__STABLE,对应的 commit id 如下。此外还引用了 PG 官方文档。
触发器简介
Trigger 即触发器,它可以在特定事件发生时,对数据库中的对象执行特定操作:
根据触发事件的不同,PG 的触发器分为两类:
不同数据库中触发器的分类有所不同,比如 Oracle 分为 DML Trigger 和 System Trigger,SQL Server 分为 DML Trigger、DDL Trigger 和 Login Trigger,不论其如何划分,多数都可以与 PG 的触发器对应上。
创建触发器语法
首先介绍创建触发器的 SQL 和 PLpgSQL 语法。
Trigger
根据 PG 官方文档,创建 Trigger 的语法如下:
下面以表 t1、t2 为例创建一个简单的触发器示例。表的定义如下:
触发器定义如下,是表 t1 上的行级触发器,对 t1 进行 INSERT 之后会触发,并执行 insert_into_t2 函数,将插入到 t1 的数据也插入到 t2。
insert_into_t2 函数定义如下,其中引用了上下文信息 NEW,表示插入到 t1 的数据,并将其插入到 t2。
Event Trigger
创建 Event Trigger 的语法如下,相比 Trigger 的语法要简单很多
以下是 PG 官方文档中的一个简单示例,该 Event Trigger 可以在任何 DDL 语句执行之前触发,并抛出异常,禁止执行任何 DDL 语句。
创建流程
简单介绍创建触发器时 PG 内核中的函数调用流程。
Trigger
CREATE TRIGGER 命令都属于 DDL 语句,所以会进入 DDL 的处理流程,关键的调用路径为: ProcessUtilitySlow-->CreateTrigger-->CreateTriggerFiringOn,CreateTriggerFiringOn 函数代码超过 行,因此只介绍其中的关键步骤:
Event Trigger
CREATE EVENT TRIGGER 的关键调用路径为: standard_ProcessUtility-->CreateEventTrigger,该函数流程相对简单很多:
触发器的存储
用户创建的触发器必须持久化到数据库中,具体的存储位置是触发器相关的系统表中。
Trigger
Trigger 存储在 pg_trigger 系统表中,表中的关键字段如下,包含触发器所在的表、触发器名、触发器调用的函数、是否可推迟等属性。总之,通过 CREATE TRIGGER 创建触发器时指定的任何信息都会存储到系统表中。
pg_trigger 系统表的各个字段在内存中用Trigger 结构体表示,定义如下,可见其成员变量与 pg_trigger 的属性是一一对应的。
在内存中的 relcache(表缓存)中也同样保存有 Trigger 的信息:
Event Trigger
Event Trigger 存储在 pg_event_trigger 系统表中,关键字段如下,包含触发器名、调用的函数等信息。与 Trigger 不同的是,这里并不包含触发器所在的表,因为 Event Trigger 不属于任何一个表。
触发过程
触发器会在特定事件场景下被触发,它识别这些事件的方式也很简单,就是在对应事件的代码处调用触发器函数。
Trigger
对于普通的触发器,触发时机是 INSERT、UPDATE、DELETE 等操作之前或者之后,所以在 PG 的执行器阶段触发,多数在 ProcessQuery-->ExecutorRun-->ExecModifyTable 函数中
我们将执行触发操作的函数称为“触发器的执行函数”,各类触发器的执行函数命名格式比较统一,在此列举几种:
以ExecBRInsertTriggers 为例说明触发过程:
Event Trigger
事件触发器支持的事件仅有 ddl_command_start、ddl_command_end、table_rewrite 和 sql_drop 这四类,分别对应四个执行函数,其触发时机说明如下:
以 EventTriggerDDLCommandStart 为例说明触发过程:
调用功能函数
用户在创建触发器的 EXECUTE { FUNCTION | PROCEDURE } function_name 语句中指定了该触发器要执行的功能函数。在触发器被触发后,会执行该函数。
Trigger
在执行器阶段触发时,ResultRelInfo 结构体中存有表上的各项信息,其中就包括表上的触发器、函数等,所以直接从中就可以拿到触发器信息。关键结构体为 ResultRelInfo、TriggerDesc、Trigger,其嵌套关系如下:
将ResultRelInfo 中获取的 Trigger 结构体的全部内容都填充到 TriggerData 结构体,ExecCallTriggerFunc 函数再从 TriggerData 中获取函数 oid,并执行该函数。
TriggerData 结构体定义如下,其中除了 Trigger 以外还保存了各种执行上下文信息,heap 表信息等,与函数的执行有关。
TriggerData 最终会保存到PLpgSQL_execstate 中,这是 PLpgSQL 执行过程中的一个重要结构体:
触发器的功能函数执行的方法与普通的 PLpgSQL 函数、存储过程执行方法是类似的,关键调用路径是: ExecCallTriggerFunc-->plpgsql_call_handler-->plpgsql_exec_trigger-->exec_toplevel_block-->exec_stmt_block-->…………
Event Trigger
对于事件触发器,在触发阶段的EventTriggerCommonSetup 函数中,通过 EventCacheLookup 从缓存中查找触发器功能函数,然后在 EventTriggerInvoke 中根据触发器函数的 oid 进行调用。
EventTriggerCommonSetup 中还会填充 EventTriggerData 结构体,其中保存了调用过程中的一些关键信息:
与普通触发器的 TriggerData 结构一样,EventTriggerData 结构体也会保存到PLpgSQL_execstate 中,在 PLpgSQL 执行过程中使用:
事件触发器的功能函数实际执行步骤与普通触发器也基本相同,关键调用路径为: ExecCallTriggerFunc-->plpgsql_call_handler-->plpgsql_exec_event_trigger-->exec_toplevel_block-->exec_stmt_block-->…………
修改触发器
使用 ALTER 语句修改触发器的定义
Trigger
根据 PG 官方文档,ALTER TRIGGER 的语法如下:
仅支持重命名和修改依赖的插件。
重命名触发器的关键调用流程为:standard_ProcessUtility-->ExecRenameStmt-->renametrig,基本原理也是读取 pg_trigger 系统表的信息,修改以后写回系统表。
修改触发器依赖插件的关键调用流程为:standard_ProcessUtility-->ExecAlterObjectDependsStmt,会修改 pg_depend 系统表。
Event Trigger
根据 PG 官方文档,ALTER EVENT TRIGGER 语法为:
支持对事件触发器进行重命名、禁用、启用、修改 owner 的操作。
ALTER TRIGGER 的关键函数是AlterEventTrigger,其内容较为简单:
删除触发器
使用 DROP 语句删除触发器
Trigger
PG 文档中 DROP TRIGGER 语法如下:
删除触发器的关键函数是RemoveTriggerById,调用流程如下: ProcessUtilitySlow-->ExecDropStmt-->RemoveObjects-->performMultipleDeletions-->deleteObjectsInList-->deleteOneObject-->doDeletion-->RemoveTriggerById
RemoveTriggerById 函数流程:
Event Trigger
PG 文档中 DROP EVENT TRIGGER 语法如下:
删除事件触发器的关键函数是DropObjectById,这是一个公用的函数,可以删除多种类型的对象。
调用流程如下: ProcessUtilitySlow-->ExecDropStmt-->RemoveObjects-->performMultipleDeletions-->deleteObjectsInList-->deleteOneObject-->doDeletion-->DropObjectById