2017-02-28 43 views
0

有沒有辦法只接收來自XOR加密的大寫字母和數字?或者更好的只有大寫字母?還是我必須使用別的東西?XOR加密只有大寫

static private byte[] encryption(byte[] input, byte[] key){ 
    byte[] out = new byte[input.length]; 
    for(int i = 0; i < input.length; i++){ 
     out[i] = (byte) (input[i]^key[i%key.length]); 
    } 
    return out; 
} 

我也想再次解密

+1

代碼中沒有字母。一個字節只是一個數字 - 如何「打印」它(例如用大寫字母以十六進制表示)是一個介紹問題。 – assylias

回答

0

您可以添加加密後的額外編碼步驟。如果您希望只接收可打印字符並使用標準方法,則可以使用Base64編碼。

如果您只需要大寫字母或其他自定義格式,則需要製作自己的編碼器和解碼器。

1

您必須創建一種「自定義XOR」 - 將允許的輸入映射到前X個數字XOR,然後將其映射回。

請注意,如果您只允許在結果中輸入大寫字母,則您只能在輸入上輸入許多不同的「字母」(輸入和輸出字母表需要大小相同)。

另外請注意,XOR是非常不安全的,除非與一次性墊一起使用。如果攻擊者可以猜出部分輸入,他可以用加密文本對其進行異或運算,並以純文本的形式看到(部分)密碼 - 他們只需要輸入密碼即可正確猜測部分輸入。

0

對於大寫字母和數字,Base32是一種可能性。或者,使用十六進制(即Base16),但將16位十六進制數字映射到字母表的前16個字母。這會給你大寫字母,只會犧牲一些額外的編程和雙倍的存儲需求。 8位數據是16位十六進制字符。