實現加鹽加密方法以及java nio中基于MappedByteBuffer操作大文件

自己實現?

傳統MD5可通過彩虹表暴力破解,?

加鹽加密算法是一種常用的密碼保護方法,它將一個隨機字符串(鹽)添加到原始密碼中,然后再進行加密處理。

  • 1. 每次調用方法產生一個唯一鹽值(UUID )+密碼=最終密碼。
  • 解密:需要驗證的密碼(用戶輸入的密碼),最終加密的密碼(存在于數據庫)得到鹽值,鹽值存在最終密碼的某個位置,——>鹽值{32位}$最終密碼{32位};
  • ?2. 對組合后的字符串進行多次哈希計算,每次哈希時都使用鹽值和先前的哈希值。哈希計算的次數由工作因子控制。

驗證密碼
已有:用戶輸入的明文密碼、此用戶在數據庫存儲的最終密碼=[鹽值$加密后的密碼]
32位32位
1.從最終密碼中得到鹽值
2.將用戶輸入的明文密碼+鹽值進行加密操作=加密后的密碼3.使用鹽值+分隔符+加密后的密碼生成數據庫存儲的密碼
4.對比生成的最終密碼和數據庫最終的密碼是否相等如果相等,那么用戶名和密碼就是對的,反之則是密碼輸入錯誤。?

package com.example.demo.common;import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;import java.nio.charset.StandardCharsets;
import java.util.UUID;public class PasswordUtils {//1.加鹽生成密碼public static String encrypt(String password){//鹽32位String salt= UUID.randomUUID().toString().replace("-","");String saltPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes());String finalPassword=salt+"$"+saltPassword;return finalPassword;}//2.生成加鹽密碼public static String encrypt(String password,String salt){String saltPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes());String finalPassword=salt+"$"+saltPassword;return finalPassword;}/**驗證密碼** @param :用戶輸入的明文密碼* @param :數據庫保存的最終密碼* @return*/public static boolean check(String inputPassword , String finalPassword){if(StringUtils.hasLength(inputPassword)&&StringUtils.hasLength(finalPassword)&&finalPassword.length()==65){String salt=finalPassword.split("\\$")[0];String confirmPssword=PasswordUtils.encrypt(inputPassword,salt);return confirmPssword.equals(finalPassword);}return false;}public static void main(String[] args) {String password="123456";String finalPassword=encrypt(password);System.out.println(PasswordUtils.encrypt(password));String inputPassword="12345";String inputPassword2="123456";System.out.println("比對結果1:"+ check(inputPassword,finalPassword));System.out.println("比對結果2  :"+ check(inputPassword2,finalPassword));//check(inputPassword2,finalPassword);}
}

?

?Spring Security

是提供身份驗證和授權的框架?,可用于用戶認證,訪問控制,安全事件和日志記錄等

還有就是Spring Security加鹽

      <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>

?這樣甚至改了頁面

當用這個認證密碼授權成功后才會到我們的登錄頁面

所以我們要排除SpringSecurity自動加載?

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})

package com.example.demo;import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;@SpringBootTest()
class  Demo1ApplicationTests {@Testvoid contextLoads() {BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();String password ="123456";// 第一次加密String finalPassword1 = passwordEncoder.encode(password);System.out.println("第1次加密:" + finalPassword1);// 第二次加密String finalPassword2 = passwordEncoder.encode(password);System.out.println("第2次加密:" + finalPassword2);// 第三次加密String finalPassword3 = passwordEncoder.encode(password);System.out.println("第3次加密:" + finalPassword3);// 驗證密碼String inputPassword = "12345";System.out.println("錯誤密碼比對結果: " + (passwordEncoder.matches(inputPassword, finalPassword1)));String inputPassword2 = "123456";System.out.println("正確密碼比對結果: " + (passwordEncoder.matches(inputPassword2, finalPassword1)));}}

?

java nio中一種基于MappedByteBuffer操作大文件

在Java中,處理大文件時常用的有基于`MappedByteBuffer`的NIO(New I/O)和基于`BufferedInputStream`、`BufferedOutputStream`等帶緩沖的傳統IO流。下面是它們之間的一些區別和相對優勢:

1. 內存映射文件(MappedByteBuffer):
? ?- **優勢**:
? ? ?- 避免了數據在Java堆內存和本地內存的多次拷貝,提高了IO操作的效率。
? ? ?- 可以利用操作系統的虛擬內存機制,對文件進行部分映射,實現了按需加載,對于大文件的處理性能更好。
? ? ?- 適合隨機訪問,可以直接在內存中修改文件內容,不需要通過讀取和寫入的方式。
? ?- **劣勢**:
? ? ?- 需要謹慎管理內存映射,避免內存泄漏和資源未釋放的問題。
? ? ?- 對于頻繁讀寫的大文件,可能會導致內存占用過高。

2. 緩沖流(BufferedInputStream、BufferedOutputStream):
? ?- **優勢**:
? ? ?- 通過緩沖區減少了對底層IO系統調用的次數,提高了IO操作效率。
? ? ?- 可以適應各種大小的文件讀寫,并且易于使用。
? ? ?- 適合順序讀寫,對于較小的文件處理效率較高。
? ?- **劣勢**:
? ? ?- 在處理大文件時,需要在Java和操作系統之間來回拷貝數據,可能會導致性能瓶頸。
? ? ?- 不支持直接在內存中修改文件內容,需要通過讀取和寫入的方式來進行操作。

綜上所述,對于大文件的處理,基于`MappedByteBuffer`的NIO操作相對于傳統的緩沖流操作具有更高的性能和更少的內存開銷,特別是在需要隨機訪問大文件內容時,`MappedByteBuffer`更為適用。但需要注意合理管理內存映射,避免潛在的風險。而基于緩沖流的傳統IO操作適用于各種大小的文件處理,易于使用,但在處理大文件時可能會存在性能瓶頸。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213081.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213081.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213081.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UDS診斷 10服務

文章目錄 簡介診斷會話切換請求和響應1、請求2、子功能3、肯定響應4、否定響應5、特殊的NRC 為什么劃分不同會話報文示例UDS中常用 NRC參考 簡介 10服務&#xff0c;即 Diagnostic Session Control&#xff08;診斷會話控制&#xff09;服務用于啟用服務器中的不同診斷會話&am…

(四) python門面模式

文章目錄 4.1 結構型設計模式4.1.1 簡介4.1.2 常見的幾種結構型設計模式 4.2 理解門面設計模式4.2.1 門面設計模式概述4.2.2 門面設計模式的作用 4.3 UML類圖4.3.1 門面4.3.2 系統4.3.3 客戶端 4.4 門面模式的代碼實現4.4.1 場景&#xff1a;4.4.2 python實現 4.5 原理&#xf…

Compose for iOS:kotlin 與 swift 互操作

前言 類似于 Android 上的 compose&#xff0c;在 iOS 上的 compose 同樣支持嵌套顯示 compose UI 和 swiftUI 或是 uikit 。 但是不同于 Android 原生就是使用 kotlin 作為開發語言&#xff0c;iOS 的開發語言是 swift 或者 object-c 。雖然大多數業務邏輯都可以直接使用 ko…

渲染(iOS渲染過程解析)

渲染 渲染原理 一個硬核硬件科普視頻 CPU和GPU CPU&#xff08;Central Processing Unit&#xff09;&#xff1a;現代計算機整個系統的運算核心、控制核心&#xff0c;適合串行計算。GPU&#xff08;Graphics Processing Unit&#xff09;&#xff1a;可進行繪圖運算工作的…

安防音頻接口選型的高性能國產芯片分析

在人工智能興起之后&#xff0c;安防市場就成為了其全球最大的市場&#xff0c;也是成功落地的最主要場景之一。對于安防應用而言&#xff0c;智慧攝像頭、智慧交通、智慧城市等概念的不斷涌現&#xff0c;對于芯片產業催生出海量需求。今天&#xff0c;我將為大家梳理GLOBALCH…

springboot_3.2_freemark_基礎環境配置

springboot_3.2_freemark_基礎環境配置 一、前言二、環境三、相關資料四、目標五、默認配置項六、構建springboot 3.2項目6.1 pom.xml 內容&#xff1a;6.2 啟動類6.3 添加ftlh模板6.4 controller內容6.5 bootstrap.yml配置 七、總結 一、前言 FreeMarker 是一款模板引擎&…

Linux——緩沖區與實現C庫的fopen,fwrite,fclose

目錄 一.緩沖區 1緩沖區的概念 2.緩沖區存在的意義 3.緩沖區刷新策略 4.什么是刷新&#xff1f; C語言的緩沖區在哪里&#xff1f; ?編輯 仿寫C庫里的fopen&#xff0c;fclose&#xff0c;fwrite。 mystdio.h mystdio.c main.c(向文件中寫入20次msg) 一.緩沖區 1…

b站pwn的學習總結

寫的很亂 1.c語言的運行過程 了解了c語言需要經過以上2個過程&#xff08;編譯和匯編&#xff09;&#xff0c;才能讓機器按指令運行。機器只能聽得懂機器碼&#xff0c;所以要“匯編”。 那問題就來了&#xff0c;“編譯”這個動作有啥用&#xff0c;c語言這種高級語言&…

玩轉大數據10:深度學習與神經網絡在大數據中的應用

目錄 1. 引言&#xff1a;深度學習和神經網絡在大數據中的重要性和應用場景 2. 深度學習的基本概念和架構 3. Java中的深度學習框架 3.1. Deeplearning4j框架介紹及Java編程模型 3.2. DL4J、Keras和TensorFlow的集成 4. 大數據與深度學習的結合 4.1. 大數據與深度學…

電腦端同時登錄多個微信

1、建立一個txt文件 2、右擊微信查看應用的屬性&#xff0c;記錄文件的位置 3、將步驟二得到的路徑按照下方的格式輸入到步驟一的文本中 4、保存之后將文本后綴名的.txt改成.bat 5、在未登錄微信的情況下&#xff0c;雙擊即可得到兩個微信登錄窗口

Python高級算法——回溯法(Backtracking)

Python中的回溯法&#xff08;Backtracking&#xff09;&#xff1a;高級算法解析 回溯法是一種通過嘗試所有可能的解來找到問題解的算法設計方法。它通常應用于組合問題、排列問題、子集問題等。在本文中&#xff0c;我們將深入講解Python中的回溯法&#xff0c;包括基本概念…

解決oracle.sql.TIMESTAMP序列化轉換失敗問題 及 J2EE13Compliant原理

目錄 報錯現象報錯內容處理方法Oracle驅動源碼總結 報錯現象 oracle表中存在TIMESTAMP類型的列時&#xff0c;jdbc查出來做序列化時報錯 報錯內容 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframewo…

x86和ARM中配置無線網SSID和PASSWORD

提供一個可行的方法 1.準備文件 hostapd.conf &#xff1a;是用戶控件的守護進程用于無線接入點&#xff08;AP&#xff09;和授權服務器&#xff08;authentication servers)&#xff0c;存放路徑&#xff1a;/etc/hostapd/hostapd.conf interfacewlp5s0 drivernl80211 chan…

Java中多線程中 synchronized 鎖升級的原理是什么?

Java中多線程中 synchronized 鎖升級的原理是什么&#xff1f; 在 Java 中&#xff0c;synchronized 鎖的升級是指在不同的場景下&#xff0c;鎖的性能優化。Java 的鎖有多個狀態&#xff0c;主要包括偏向鎖、輕量級鎖和重量級鎖。 偏向鎖&#xff1a;當只有一個線程訪問同步塊…

acwing算法提高之動態規劃--背包模型(三)

目錄 1 基礎知識2 模板3 工程化 1 基礎知識 暫無。。。 2 模板 暫無。。。 3 工程化 題目1&#xff1a;潛水員。 解題思路&#xff1a;DP。 狀態定義f[i][j][k]&#xff1a;從前i個物品中選&#xff0c;氧氣至少為j&#xff0c;氮氣至少為k的最小方案數。 狀態轉移&…

解決idea 通過build project 手動觸發熱部署失敗

在debug運行項目的過程中&#xff0c;并且保證&#xff08;不添加方法&#xff0c;不修改方法名&#xff09;一定的規則的情況下&#xff0c;可以通過build project 來手動熱部署項目&#xff0c;也就是會交換class文件與resouces文件。 設置項 Edit Configurations Modify Op…

計算機圖形學理論(1):建模基礎

本系列根據國外一個圖形小哥的講解為本&#xff0c;整合互聯網的一些資料&#xff0c;結合自己的一些理解。 場景的組成部分 場景相當于一個或多個模型的集合。模型包含以下內容&#xff1a; 結構描述&#xff1a;幾何形狀&#xff0c;如頂點、紋理坐標等表面描述&#xff1a…

Vue3中的defineModel

目錄 一、vue3的defineModel介紹 二、defineModel使用 &#xff08;1&#xff09;在vite.config.js中開啟 &#xff08;2&#xff09;子組件 &#xff08;3&#xff09;父組件 一、vue3的defineModel介紹 為什么要使用到defineModel呢&#xff1f;這里有這樣一種場景&…

“快速排序:一種美麗的算法混沌”(1.hoare)

歡迎來到我的博客&#xff01;在今天的文章中&#xff0c;我將采用一種獨特且直觀的方式來探討我們的主題&#xff1a;我會使用一幅圖像來貫穿整篇文章的講解。這幅精心設計的圖表不僅是我們討論的核心&#xff0c;也是一個視覺輔助工具&#xff0c;幫助你更深入地理解和掌握本…

學習深度強化學習---第2部分----RL動態規劃相關算法

文章目錄 2.1節 動態規劃簡介2.2節 值函數與貝爾曼方程2.3節 策略評估2.4節 策略改進2.5節 最優值函數與最優策略2.6節 值迭代與策略迭代2.7節 動態規劃求解最優策略 本部分視頻所在地址&#xff1a;深度強化學習的理論與實踐 2.1節 動態規劃簡介 態規劃有兩種思路&#xff1…