加密後得到的結果如下:
wecrlteerdsoeefeaocaivden
對於籬笆加密,網上是沒有很具體的演算法。 考慮到這一點,我才將我自己總結出來的具體演算法寫在部落格裡。
2.具體演算法
2.1.整體思路
首先根據籬笆條數將明文按一定的方式儲存到一維陣列中,然後按一定的判斷條件順序取出。
2.2.儲存
假設我要加密abcde...xyz,用5條籬笆
a0
i9
*10
q19
*20
y29
*30
b1
h8
j11
p18
r21
x28 z31
c2
g7
k12
o17
s22 w27
d3
f6
l13
n16
t23 v26
e4
*5
m14
*15
u24 *25
字元右面的小寫的0.1.2.3...31, 代表的是該字元儲存一維陣列的序號。 這裡的
規律其實就是:if(i%n==0)儲存特殊「*」。
「*」的位置可以不用賦值,為了驗證儲存是否正確,也可以存乙個特殊的字元。
2.3.取出
資料當然是一行一行的取出,在取一行一行的取出的時候,第一列的資料可以不用管。直接取出
這裡用i變數來表示字元在陣列中的序號。
假設行數用l表示。
2.3.1.取
首行 先取序號為0的字元a。 l=1。即:序號為l-1
然後依次取出滿足
if((i+1)%(2*n) == 0)
條件的字元。 這裡i+1其中的i。 其實就是l。
本例的n=5。那麼當i = 9,i = 19,i = 29的時候,滿足以上條件。就被取出了。看2.2的儲存表可驗證
2.3.2.取
中間行 比如第二行,首先取出序號為1的字元b。
l=2。即:序號為l-1
然後依次取出滿足if((i+2)%(2*n)==0 || (i-1)%(2*n)==0)條件的字元
本來的n=5。那麼當i=8,i=11,i=18,i=21,i=28,i=31的時候,字元被取出,
看2.2的儲存表可驗證
第三行的條件則是:
if((i+3)%(2*n)==0 || (i-2)%(2*n)==0)
第四行的條件則是:
if((i+4)%(2*n)==0 || (i-3)%(2*n)==0)
假設行數用l表示。
取出中間行的規律則是:
if((i+l)%(2*n)==0 || (i-(l-1))%(2*n)==0)
2.3.3.取出
末行假設行數用l表示。
首先取出序號為4的字元e, 即:序號為l-1的字元。
然後依次取出滿足
if((i-4)%(2*n)==0)。
這裡的4。其實就是l-1。
對稱加密演算法 DES加密演算法
一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...
gentry同態加密演算法 同態加密演算法
本文對同態加密演算法進行學習。參考文章同態加密演算法。定義同態加密演算法保證對聯合密文的解密結果等價於聯合明文。若存在同態加密演算法f,針對明文a和b,加密後分別得到a f a b f b 將其和a b 解密後得到a b,則同態加密演算法f被成為加法同態加密演算法。加法同態演算法的加密和解密分別用e...
對稱加密演算法 非對稱加密演算法
對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文...