Java和SpringBoot安全加密方式選擇哪種? - foojay
如果您需要在您的系統中儲存敏感資料,您必須確保您有適當的加密。首先,您需要決定您需要哪種加密方式——例如,對稱加密還是非對稱加密。
選擇標準是根據安全程度等因素權衡,更強的加密需要更多時間並消耗更多 CPU。
當然您不需要自己實現加密演算法。加密很難,值得信賴的庫為您解決加密問題。
例如,如果我們想要加密諸如信用卡詳細資訊之類的東西,我們可能需要一種雙向加密演算法,因為我們需要能夠檢索原始號碼。假設我們使用高階加密標準 (AES),這是目前美國聯邦組織的標準對稱加密演算法。為了加密和解密,沒有理由深入研究低階 Java 加密。我們建議您使用為您完成繁重工作的庫。例如,谷歌 Tink。
<dependency> <groupId>com.google.crypto.tink</groupId> <artifactId>tink</artifactId> <version>1.6.0</version> </dependency> |
下面是一個簡短示例,說明如何透過 AES 使用具有關聯資料的身份驗證加密 (AEAD)。這使我們能夠加密明文並提供應該經過身份驗證但未加密的相關資料。
AeadConfig.register(); KeysetHandle keysetHandle = KeysetHandle.generateNew(KeyTemplates.get("AES256_GCM")); String plaintext = "I want to break free!"; String aad = "Queen"; Aead aead = keysetHandle.getPrimitive(Aead.class); byte[] ciphertext = aead.encrypt(plaintext.getBytes(), aad.getBytes()); String encr = Base64.getEncoder().encodeToString(ciphertext); System.out.println(encr); byte[] decrypted = aead.decrypt(Base64.getDecoder().decode(encr), aad.getBytes()); String decr = new String(decrypted); System.out.println(decr); |
對於密碼,使用強密碼雜湊雜湊演算法更安全,因為我們不需要檢索原始密碼,只需匹配雜湊。根據OWASP 密碼儲存備忘單,Argon2id、BCrypt 和 SCrypt 最適合這項工作。所有都是加密雜湊(單向函式)和耗費大量時間的計算困難的演算法。這正是您想要的,因為以這種方式進行蠻力攻擊需要很長時間。
Spring security
Spring security 為各種演算法提供了極好的支援。嘗試使用例如BCryptPasswordEncoderSpring Security 工具 5 提供的用於密碼雜湊的目的。
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-crypto</artifactId> <version>5.5.0</version> </dependency> BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); //default strength is 10 String password = "ThisIsMyPassword"; //encode String hash = encoder.encode(password); //matching Boolean match = encoder.matches(password, hash)); |
今天是強加密演算法,一年後可能是弱演算法。因此,需要定期檢查加密,以確保您使用正確的演算法進行工作。將經過審查的安全庫用於這些任務,並使您的庫保持最新。此外,請確保經常使用Snyk Open Source等工具掃描您的開源庫是否存在安全漏洞,以防止出現令人不快的意外。
相關文章
- 學習Python語言選擇哪種方式好?Python
- 到底應該選擇哪種Linux.NET的部署方式?Linux
- Python和Java該如何選擇?選哪個好?PythonJava
- Python和Java,你會選擇哪個?PythonJava
- Java 常用的 4 種加密方式Java加密
- 學習Java哪個好?選擇哪個版本Java
- Java和Go語言二選一,選擇哪門語言好?JavaGo
- css選擇器有哪幾種型別CSS型別
- Maven 和 Gradle:選擇哪個?MavenGradle
- java md5加密的幾種方式Java加密
- 前端學習(2576):選擇何種方式的路由和底層原理前端路由
- Java和Python哪個就業前景好?初學者如何選擇?JavaPython就業
- Golang vs Rust 為後端選擇哪種語言?GolangRust後端
- 本地化部署和按需購買,我們該選擇哪種SaaS模式?模式
- Java 與 Python:你應該選擇哪個?JavaPython
- 網路安全中常用的幾種加密方式都有哪些?加密
- Java實際工作裡用到的幾種加密方式Java加密
- Java選擇框和單選按鈕Java
- 網路安全和軟體開發學哪個好?0基礎如何選擇?
- C+、Java、Python選擇哪個程式語言?JavaPython
- 程式設計師,選擇和努力哪個重要?程式設計師
- SUSE和Ubuntu,Linux版本該選擇哪個?UbuntuLinux
- 網路安全中常見的四種加密方式是什麼?加密
- 初學程式語言,選擇python和Java哪個比較合適?PythonJava
- VPS主機或者雲伺服器選擇哪種好?伺服器
- python和java該如何選擇?PythonJava
- Apache Flink on K8s:四種執行模式,我該選擇哪種?ApacheK8S模式
- 如何選擇元素定位方式
- CSS 引入方式,選擇器CSS
- 你還在為選擇哪種語言而猶豫不前嗎?
- Java加密與安全Java加密
- HTTPS-各種加密方式HTTP加密
- Java中的七種函式程式設計技術 - foojayJava函式程式設計
- MySQL如何選擇隨機記錄?有好幾種方式呢!MySql隨機
- Python和Web前端選擇哪個比較合適?哪個前景好?PythonWeb前端
- 小白轉行,python、Java、c++選擇哪個合適?PythonJavaC++
- Python和Web前端選擇哪個比較合適?PythonWeb前端
- PHP和Python如何選擇?哪個更有發展前途?PHPPython