主頁 > 企業開發 > 淺析橢圓曲線加密演算法(ECC)

淺析橢圓曲線加密演算法(ECC)

2020-09-12 04:57:06 企業開發

本文首發于先知社區,原文鏈接:https://xz.aliyun.com/t/6295

數學基礎

黎曼幾何中的“平行線”

歐幾里得《幾何原本》中提出五條公設:

  1. 過相異兩點,能作且只能作一直線,
  2. 有限直線可以任意地延長,
  3. 以任一點為圓心、任意長為半徑,可作一圓,
  4. 凡直角都相等,
  5. 兩直線被第三條直線所截,如果同側兩內角和小于兩個直角, 則兩直線作會在該側相交(平行公設),

《幾何原本》中只有第29條命題,

一條直線與兩條平行直線相交,則所成的內錯角相等,同位角相等,且同旁內角之和等于兩直角

才用到了第五公設,其他命題并沒有使用到,因此一些數學家提出疑問:第五公設能否不作為公設,而作為一條定理?能否靠前四條公設證明之?因此出現了長期的關于“平行線理論”的討論,歐氏幾何講“過直線外一點有且只有一條直線與已知直線平行”,后面就有個羅氏幾何(羅巴切夫斯基)講“過直線外一點至少存在兩條直線和已知直線平行”,那么是否有“過直線外一點,不能做直線和已知直線平行?”,黎曼幾何就回答了這個問題,

黎曼幾何中不承認平行線的存在,即在同一平面內任何兩條直線都有公共點(交點),另一條公設講:直線可以無限延長,但總的長度是有限的,

黎曼幾何也被稱為橢圓幾何,橢圓曲線就是基于黎曼幾何的“平行線理論”,

定義平行線相較于無窮遠點P∞,使平面上所有直線都有唯一的交點,

clipboard.png

無窮遠點的性質:

  • 一條直線只有一個無窮遠點,
  • 平面上一組相互平行的兩條直線有公共的無窮遠點,
  • 平面上任何相交的直線有不同的無窮遠點(否則就會存在兩個交點),
  • 平面上全體無窮遠點構成一條無窮遠直線
  • 平面上全體無窮遠點與全體平常點構成射影平面

射影平面坐標系

射影平面坐標系是對笛卡爾平面直角坐標系的擴展,普通平面直角坐標系無法表示無窮遠點,因此為了表示無窮遠點的坐標,產生了射影平面坐標系,

射影平面點的表示:

對普通平面直角坐標系上的點A(x,y),令x=X/Z,y=Y/Z(Z≠0),則點A在射影平面上表示為(X:Y:Z),

那么對于平面直角做標記上的點(1,2),在射影平面上坐標為(Z:2Z:Z)Z≠0,

直線方程表示為aX+bY+cZ=0,

兩條平行線L1: X+2Y+3Z=0與L2: X+2Y+Z=0,因為L1||L2,所以Z=0,X+2Y=0,所以無窮遠點坐標為(-2Y:Y:0),

橢圓曲線方程

一條橢圓曲線在射影平面滿足一齊次方程——威爾斯特拉斯方程:

的所有點的集合,且曲線上的每個點都是非奇異(光滑)的,

橢圓曲線并不是橢圓,是由橢圓曲線的描述方程類似于計算橢圓周長的方程而得名,

“非奇異”或“光滑”,可以理解為,滿足方程的任意一點都存在切線,雖然有的方程滿足上面的形式,但是并不是橢圓曲線,

橢圓曲線上有一個無窮遠點(0:1:0)且滿足方程,

如何把橢圓曲線放到平面直角坐標系呢?射影平面坐標系只多了個無窮遠點,因此求出平面直角坐標系上橢圓曲線所有平常點組成的曲線方程,再加上無窮遠點,就構成了橢圓曲線,

把x=X/Z,y=Y/Z代入威爾斯特拉斯方程,得到普通方程:

image.png

橢圓曲線上的群操作

假設用加法符號“+”表示群操作,給定兩個點及其坐標,P(x1,y1),Q(x2,y2),計算第三個點R坐標:

P+Q=R (x1,y1)+(x2,y2)=(x3,y3)

在橢圓曲線上定義阿貝爾群,其運演算法則:

任意選取橢圓曲線上兩點P、Q(若P、Q兩點重合,則作P點的切線)作直線交于橢圓曲線的另一點R',過R'作y軸平行線交于R,規定P+Q=R,

相異點相加P+Q:

clipboard.png

相同點相加P+P:

clipboard.png

若有k個相同的P點相加,記作kP,

有限域上的橢圓曲線

實數域上的橢圓曲線是連續的,并不適用于加密,考慮到加密演算法的可實作性,要把橢圓曲線定義在有限域上,使之變成離散的點,

給定一個有限域Fp:

  • Fp只有p(p為素數)個元素0,1,2...p-2,p-1;
  • Fp的加法(a+b)法則是a+b≡c(mod p);
  • Fp的乘法(a×b)法則是a×b≡c(mod p);
  • Fp的除法(a÷b)法則是a÷b≡c(mod p),即a×b^-1≡c(mod p),b^-1為b的逆元;
  • Fp的單位元是1,零元是0;
  • Fp域內運算滿足交換律、結合律、分配律,

并非所有的橢圓曲線都適合加密,下面定義一類適合加密的橢圓曲線:

橢圓曲線Ep(a,b),p為質數,x,y∈[0,p-1]:

image.png

選擇兩個滿足下列約束條件的小于p的非負整數a、b:

image.png

  • 無窮遠點O∞是零元,有O∞+O∞=O∞,O∞+P=P;
  • P(x,y)的負元是(x,-y),有P+(-P)=O∞;
  • P(x1,y1),Q(x2,y2)和R(x3,y3)有如下關系:
    image.png
    其中若P=Q則
    image.png
    ,若P≠Q則
    image.png
    k為直線斜率,

橢圓曲線上點的階

如果橢圓曲線上一點P,存在最小的正整數n使得數乘nP=O∞,則稱n為P的階,若n不存在,則P為無限階,

在有限域上定義的橢圓曲線,所有點的階n都是存在的,

加密與解密

等式Q=dG(Q,G為Ep(a,b)上的點,d為小于n(n是點G的階)的整數),在有限域上的橢圓曲線,給定d和G,根據有限域上的加法法則,很容易計算出Q;但給定Q和G,很難計算出d,這就是橢圓曲線的離散對數難題,

點G稱為基點,d為私鑰,Q為公鑰,

加解密步驟

  1. Alice選定一條橢圓曲線Ep(a,b),并取曲線上一點作為基點G,
  2. Alice選擇一個d作為私鑰,并生成公鑰Q=dG,
  3. Alice將曲線Ep(a,b)和點Q、G發給Bob,
  4. Bob收到資訊后,將待傳輸的明文編碼到曲線Ep(a,b)上的一點M,并選擇一個隨機整數k(k<n),
  5. Bob計算點C1=M+kQ;C2=kG,
  6. Bob將C1 C2發給Alice,
  7. Alice收到資訊后,計算C1-dC2=M+kQ-d(kG)=M+k(dG)-d(kG)=M,得到點M,再對點M進行解碼就得到明文,

攻擊者從信道中截取資訊,只能得到Ep(a,b),Q,G,C1,C2,而通過Q、G求d或通過C1、C2求k都是困難的,因此攻擊者無法獲取到明文,

密碼學中描述一條有限域上的橢圓曲線常用到六個參量:
T=(p,a,b,G,n,h)

p、a、b用來確定一條橢圓曲線,G為基點,n為點G的階,h是有限域橢圓曲線上所有點的個數m與n相除得到的整數部分,

這幾個參量取值的選擇,直接影響了加密的安全性,一般滿足如下條件:

  1. p越大越好,但越大,計算速度會變慢,200位左右可滿足一般安全需求;
  2. p≠n×h;
  3. image.png 1≤t<20;
  4. image.png
  5. n為素數;
  6. h≤4,

Demo

這是參考網上的資料實作的簡易ECC加解密Demo:


# -*- coding:utf-8 -*-

def get_inverse(value, p):
    """
    求逆元
    :param value: 待求逆元的值
    :param p: 模數
    """
    for i in range(1, p):
        if (i * value) % p == 1:
            return i
    return -1

def get_gcd(value1, value2):
    """
    輾轉相除法求最大公約數
    :param value1:
    :param value2:
    """
    if value2 == 0:
        return value1
    else:
        return get_gcd(value2, value1 % value2)

def get_PaddQ(x1, y1, x2, y2, a, p):
    """
    計算P+Q
    :param x1: P點橫坐標
    :param y1: P點縱坐標
    :param x2: Q點橫坐標
    :param y2: Q點縱坐標
    :param a: 曲線引數
    :param p: 曲線模數
    """
    flag = 1 # 定義符號位(+/-)

    # 如果P=Q,斜率k=(3x^2+a)/2y mod p
    if x1 == x2 and y1 == y2:
        member = 3 * (x1 ** 2) + a # 分子
        denominator = 2 * y1 # 分母

    # 如果P≠Q, 斜率k=(y2-y1)/(x2-x1) mod p
    else:
        member = y2 - y1
        denominator = x2 - x1

        if member * denominator < 0:
            flag = 0 # 表示負數
            member = abs(member)
            denominator = abs(denominator)

    # 化簡分子分母
    gcd = get_gcd(member, denominator) # 最大公約數
    member = member // gcd
    denominator = denominator // gcd
    # 求分母的逆元
    inverse_deno = get_inverse(denominator, p)
    # 求斜率
    k = (member * inverse_deno)
    if flag == 0:
        k = -k
    k = k % p

    # 計算P+Q=(x3,y3)
    x3 = (k ** 2 - x1 - x2) % p
    y3 = (k * (x1-x3) -y1) % p

    return x3, y3

def get_order(x0, y0, a, b, p):
    """
    計算橢圓曲線的階
    """
    x1 = x0 # -P的橫坐標
    y1 = (-1 * y0) % p # -P的縱坐標
    temp_x = x0
    temp_y = y0
    n = 1
    while True:
        n += 1
        # 累加P,得到n*P=0∞
        xp, yp = get_PaddQ(temp_x, temp_y, x0, y0, a, p)
        # 如果(xp,yp)==-P,即(xp,yp)+P=0∞,此時n+1為階數
        if xp == x1 and yp == y1:
            return n+1
        temp_x = xp
        temp_y = yp

def get_dot(x0, a, b, p):
    """
    計算P和-P
    """
    y0 = -1
    for i in range(p):
        # 滿足適合加密的橢圓曲線條件,Ep(a,b),p為質數,x,y∈[0,p-1]
        if i**2 % p == (x0**3 + a*x0 + b) % p:
            y0 = i
            break
    # 如果找不到合適的y0回傳False
    if y0 == -1:
        return False
    # 計算-y
    x1 = x0
    y1 = (-1*y0) % p
    return x0, y0, x1, y1

def get_graph(a, b, p):
    """
    畫出橢圓曲線散點圖
    """
    xy = []
    # 初始化二維陣列
    for i in range(p):
        xy.append(['-' for i in range(p)])

    for i in range(p):
        value = https://www.cnblogs.com/KRDecad3/p/get_dot(i, a, b, p)
        if (value != False):
            x0,y0,x1,y1 = value
            xy[x0][y0] = 1
            xy[x1][y1] = 1

    print('橢圓曲線散點圖:')
    for i in range(p):
        temp = p - 1 -i
        if temp >= 10:
            print(temp, end='')
        else:
            print(temp, end='')

        # 輸出具體坐標值
        for j in range(p):
            print(xy[j][temp], end='')
        print()

    print(' ', end='')
    for i in range(p):
        if i >= 10:
            print(i, end='')
        else:
            print(i, end='')

    print()

def get_nG(xG, yG, priv_key, a, p):
    """
    計算nG
    """
    temp_x = xG
    temp_y = yG
    while priv_key != 1:
        temp_x, temp_y = get_PaddQ(temp_x, temp_y, xG, yG, a, p)
        priv_key -= 1
    return temp_x, temp_y

def get_KEY():
    """
    生成公鑰私鑰
    """
    # 選擇曲線方程
    while True:
        a = int(input('輸入橢圓曲線引數a(a>0)的值:'))
        b = int(input('輸入橢圓曲線引數b(b>0)的值:'))
        p = int(input('輸入橢圓曲線引數p(p為素數)的值:'))

        # 滿足曲線判別式
        if (4*(a**3)+27*(b**2))%p == 0:
            print('輸入的引數有誤,請重新輸入!\n')
        else:
            break

    # 輸出曲線散點圖
    get_graph(a, b, p)

    # 選擇基點G
    print('在上圖坐標系中選擇基點G的坐標')
    xG = int(input('橫坐標xG:'))
    yG = int(input('縱坐標yG:'))

    # 獲取曲線的階
    n = get_order(xG, yG, a, b, p)

    # 生成私鑰key,且key<n
    priv_key = int(input('輸入私鑰key(<%d):'%n))
    #生成公鑰KEY
    xK, yK = get_nG(xG, yG, priv_key, a, p)
    return xK, yK, priv_key, a, b, p, n, xG, yG

def encrypt(xG, yG, xK, yK,priv_key, a, p, n):
    """
    加密
    """
    k = int(input('輸入一個整數k(<%d)用于計算kG和kQ:' % n))
    kGx, kGy = get_nG(xG, yG, priv_key, a, p) # kG
    kQx, kQy = get_nG(xK, yK, priv_key, a, p) # kQ
    plain = input('輸入需要加密的字串:')
    plain = plain.strip()
    c = []
    print('密文為:', end='')
    for char in plain:
        intchar = ord(char)
        cipher = intchar * kQx
        c.append([kGx, kGy, cipher])
        print('(%d,%d),%d' % (kGx, kGy, cipher), end=' ')

    print()
    return c

def decrypt(c, priv_key, a, p):
    """
    解密
    """
    for charArr in c:
        kQx, kQy = get_nG(charArr[0], charArr[1], priv_key, a, p)
        print(chr(charArr[2] // kQx), end='')
    print()


if __name__ == '__main__':
    xK, yK, priv_key, a, b, p, n, xG, yG = get_KEY()
    c = encrypt(xG, yG, xK, yK, priv_key, a, p, n)
    decrypt(c, priv_key, a, p)

注:加密函式中,計算密文是通過明文字符的ASCII碼乘點kQ的x坐標得到,即incharkQx;而一些加密中是將明文轉換為大整數再轉換為曲線上的點M(x,y),密文為(C1=kG, C2=(M+kQ)),解密M=C1-priv_keyC2=M+kQ-priv_keykG=M+kpriv_keyG-priv_keykG

總結

本文初步介紹了ECC演算法的基本原理和實作步驟,另外,橢圓曲線還應用于密鑰交換ECDH、數字簽名ECDSA等,一些區塊鏈專案中使用的加密演算法也是橢圓曲線,如位元幣中的數字簽名演算法Secp256k1,

由于本人水平有限,文章出現紕漏,還請大佬們斧正,

參考文章

https://www.pediy.com/kssd/pediy06/pediy6014.htm

https://blog.dyboy.cn/websecurity/121.html

https://github.com/amintos/PyECC/tree/master/ecc

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/10880.html

標籤:訊息安全

上一篇:Reproduction CVE_2019_0708

下一篇:Silky-CTF: 0x02 Vulhub Walkthrough

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more