學習加密/加密算法
我是一名初級程序員,有興趣編寫自己的應用程序來加密我的敏感文件。例如:密碼、銀行賬戶、信用卡號碼等列表。
我想知道從純理論的角度來看,最容易學習的加密算法是什麼?
關於“作為一個新程序員……”:
可能您還不知道這一點,但作為經驗法則:除非您真的是該領域的專家,否則不要將您自己實現的加密用於任何事情。這對外界來說似乎違反直覺,但其他任何事情都必須被認為是不安全的。
這樣做的原因是,對於程式和電腦科學的大多數方面,平均情況是最重要的。系統中是否存在非常不可能的缺陷並不是很重要,因為它可能無論如何都不會發生。但在加密貨幣中,攻擊者將利用此漏洞故意破壞系統。因此,重要的不是平均情況,而是最壞的情況。例如,您可以找到“攻擊者猜對的機率不超過 $ \frac{1}{2^n} $ “(最壞情況估計)。
上面的陳述並不完全正確,但它取決於抽象層:如果您使用加密、散列函式、密鑰交換、TLS 等的標準實現……您可以在高級協議中使用這些原語,並且很可能您是“安全的”。
但是如果你開始編寫自己的加密原語,你可能會忽略一些東西。更糟糕的是,如果您開始在更大的上下文中使用您的原語,那麼在單個函式中不僅會出現小問題……您會使整個系統變得不安全。安全就像一條鏈條,它會以最薄弱的一環斷裂,而不是“平均強度”。
回到主題:
您可以實施加密方案來練習或學習一些東西,但我強烈建議不要使用它。
對於實踐,這在很大程度上取決於您作為程序員的經驗。一開始,您可能要考慮使用像Caesar、Vigenere這樣的歷史密碼,以便熟悉這些原則(它們並不安全)。如果你想擁有更有用的東西,你可以實現一個流密碼(XOR cipher with some kind of random number generator)。一些公鑰密碼系統也可以很容易地實現。例如 ElGamal 加密、普通 RSA、DSA 等……只要遠離橢圓曲線加密,除非你了解它們實際上是什麼。
對於使用,您可能想了解如何導入和使用標準加密庫,例如“Cryptlib”、“Bouncy Castle”、“OpenSSL”等。例如,這是一個庫列表。