Challenge
Solve
這題很簡單的實作了一個 BB84 的 Key exchange
關於 BB84 的詳細內容可以去查看 Wikipedia
由於使用的基底和光子的偏正態都給了,也因為這裡的光子並不是真正的量子,而是以數字取代方向
因此寫個腳本把基底相符的光子拿出來,轉回真正的 0
或 1
就好了
def measure(qubits, basis):
bit_stream = ""
for q, b in zip(qubits, basis):
if b == 'x':
q *= complex(0.707, -0.707)
bit_stream += str(np.random.choice([0,1], p=[round(pow(q.real, 2),1), round(pow(q.imag, 2),1)]))
return bit_stream
def key_exchange(qubits, basisA, basisB) :
measured_bits = measure(qubits, basisA)
bs = ''
for i in range(LENGTH) :
if basisA[i] == basisB[i] :
bs += measured_bits[i]
return bs
def measure(qubits, basis): |
解題腳本:solve.py