ASN1 BER/DER编码子集入门指南详解

版权申诉
0 下载量 8 浏览量 更新于2024-11-04 收藏 406KB RAR 举报
资源摘要信息:"ASN.1 BER DER 编码子集入门指南" 知识点: 1. ASN.1 基础知识: ASN.1(抽象语法标记一)是一种用于描述数据格式的语言,广泛用于网络通信和数据交换中,尤其是在ITU-T和ISO标准中。 ASN.1本身不定义数据的编码方式,它定义了一种抽象的数据结构,具体的数据编码则由BER(Basic Encoding Rules)和DER(Distinguished Encoding Rules)等规则来实现。 2. BER 编码规则: BER是ASN.1定义的一种编码规则,用于将ASN.1定义的数据结构转换为字节流。 BER编码是可变长度的,支持长度的三种表示方式:短格式(1个字节表示长度)、中等格式(2个字节表示长度)和长格式(3个或更多字节表示长度)。 3. DER 编码规则: DER是BER的一个子集,保证了数据的编码是唯一的,即同一数据结构的编码总是相同的。因此,DER适用于需要保持数据格式一致性的情况,比如证书和数字签名。 DER编码是严格的固定格式,便于解析和验证数据的完整性。 4. ASN.1 BER 和 DER 编码的应用场景: 在通讯编程中,特别是在需要进行数据交换和网络通信的场景下,使用ASN.1 BER和DER编码可以确保数据的准确性和一致性。这些规则广泛应用于X.509证书、LDAP、SNMP、PKIX等协议和标准中,保证了不同系统和设备之间的兼容性和互操作性。 5. 编码过程的细节: 编码过程中,数据首先被 ASN.1 描述语言定义成一系列的模块和类型声明。然后,根据BER或DER规则,将这些结构化的数据转换为字节序列。解码时,相反地将字节序列还原成 ASN.1 描述的数据结构。 6. ASN.1 的模块化和重用性: ASN.1 最大的优势之一在于其高度的模块化和重用性。标准模块可以被多个应用领域所共享,通过包含和扩展现有模块, ASN.1 使得维护和升级系统变得更加方便。 7. 编码和解码工具: 在处理ASN.1 BER和DER编码时,通常需要使用专门的工具或库来实现数据的编码和解码。在多种编程语言中,如C, C++, Java, Python等,都有可用的ASN.1库来支持这些操作。 8. 编码实践中的注意事项: 在进行ASN.1 BER和DER编码的实践中,需要注意的事项包括确保数据类型和结构的正确性,避免解析错误;关注性能问题,尤其是在数据量较大的情况下;以及确保安全性,防止数据在传输过程中被篡改或截取。 9. 文件格式和阅读建议: 提供的资源为PDF格式的文档,名称为"ASN.1 BER DER 编码子集入门指南.pdf"。这份文档适合通讯编程相关人员以及对数据编码规则感兴趣的工程师阅读。建议读者具备一定的通讯编程和数据交换协议的知识背景,以便更好地理解和应用文档中的内容。 综上所述,通过学习ASN.1 BER和DER编码子集,可以深入理解数据在通讯编程中的处理方式,掌握在不同系统和平台间如何保证数据的一致性和准确性。这对于开发高效、安全的通信协议和应用具有重要意义。
2023-07-13 上传

以下代码有错误修改:from bs4 import BeautifulSoup import requests import openpyxl def getHTMLText(url): try: r=requests.get(url) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: r="fail" return r def find2(soup): lsauthors=[] for tag in soup.find_all("td"): for img in tag.select("img[title]"): h=[] h=img["title"] lsauthors.append(h) def find3(soup): lsbfl=[] for tag in soup.find_all("td")[66:901]: #print(tag) bfl=[] bfl=tag.get_text() bfl=bfl.strip() lsbfl.append(bfl) return lsbfl if __name__ == "__main__": url= "https://www.kylc.com/stats/global/yearly/g_population_sex_ratio_at_birth/2020.html" text=getHTMLText(url) soup=BeautifulSoup(text,'html.parser') find2(soup) lsbfl=find3(soup) workbook=openpyxl.Workbook() worksheet = workbook.create_sheet('排名',index=0) project=['排名','国家/地区','所在洲','出生人口性别比'] rank=[] a=2 b=3 c=1 for i in range(1,201,1): rank.append(i) for i in range(len(project)): worksheet.cell(row=1, column=i + 1).value = project[i] for i in range(len(rank)): worksheet.cell(row=i + 2, column=1).value = rank[i] for i in range(200): worksheet.cell(row=i + 2, column=2).value = lsbfl[c] c=c+4 for i in range(200): worksheet.cell(row=i + 2, column=3).value = lsbfl[a] a=a+4 for i in range(200): worksheet.cell(row=i + 2, column=4).value = lsbfl[b] b=b+4 wb=workbook wb.save('D:\世界各国出生人口性别比.xlsx') import numpy as np import matplotlib.pyplot as plt import matplotlib labels = ['United States','China','Ukraine','Japan','Russia','Others'] values = np.array([11,69,9,23,20,68]) fig = plt.figure() sub = fig.add_subplot(111) sub.pie(values, labels=labels, explode=[0,0,0,0,0,0.05], autopct='(%.1f)%%', shadow = True, wedgeprops = dict( edgecolor='k', width=0.85)) sub.legend() fig.tight_layout() labels2=['0-100','100-200','>200'] people_means=[140,43,17] x=np.arange(len(labels2)) width=0.50 fig,ax=plt.subplots() rects=ax.bar(x,people_means,width,label='Number of matches') ax.set_ylabel('sum') ax.set_title('People compare') ax.set_xticks(x) ax.set_xticklabels(labels2) ax.legend() plt.show()

2023-04-19 上传