亚洲欧美日韩国产成人|亚洲中文字幕无码中字|HEYZO在线无码综合|久久久不卡精品国产一区二|久久精品亚洲无中文东京热|中文字幕乱码一区三区免费|亚洲国产欧美在线观看片不卡|国产精品久久一区二区三区97

這都可以?(aes加密后長度太長可以縮短嗎)aes每次加密結果都不一樣,AES字節(jié)數(shù)組加密解密流程,曼菲秀祛除妊娠紋是真是假,

保健品 nanfang 2023-08-04 02:12 155 0

1.aes加密后長度變化

AES類時微軟MSDN中最常用的加密類,微軟官網(wǎng)也有例子,參考鏈接:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.aes?view=netframework-4.8

2.aes加密會重復嗎

但是這個例子并不好用,限制太多,通用性差李敏鎬整容,實際使用中,我遇到的更多情況需要是這樣:1、輸入一個字節(jié)數(shù)組,經(jīng)AES加密后,直接輸出加密后的字節(jié)數(shù)組2、輸入一個加密后的字節(jié)數(shù)組,經(jīng)AES解密后,直接輸出原字節(jié)數(shù)組。

3.aes加密結果不一樣

對于我這個十八流業(yè)余愛好者來說,AES我是以用為主的,所以具體的AES是怎么運算的,我其實并不關心,我更關心的是AES的處理流程結果恰恰這一方面,網(wǎng)上的信息差強人意,看了網(wǎng)上不少的帖子,但感覺都沒有說完整說透,而且很多帖子有錯誤。

4.aes加密des

因此,我自己繪制了一張此種方式下的流程圖:

5.aes加密后都是字符嗎

字符串在加密后,長度會變長如果數(shù)組長度為16的倍數(shù),則加密后的數(shù)組長度=原長度+16;如李敏鎬整容果數(shù)組長度不為16的倍數(shù),則加密后的數(shù)組長度=16倍數(shù)向上取整按照此流程圖進行了核心代碼的編寫,驗證方法AesCoreSingleTest既是依照此流程的產(chǎn)物,實例化類AesCoreSingle后調(diào)用此方法即可驗證。

6.aes加密用法

至于類中的異步方法EnOrDecryptFileAsync,則是專門用于文件加解密的處理,此異步方法參考自《C# 6.0學習筆記》(周家安 著)最后的示例,這本書寫得真棒但我也有疑惑,為什么周家安的異步方法,就不用考慮字符串加密前后長度變化的問題呢?。

7.aes加密后出現(xiàn)加號

classAesSingleCore{/// /// 使用用戶口令,生成符李敏鎬整容合AES標準的key和iv /// /// 用戶輸入的口令 。

8.aes加密key有什么限制

/// 返回包含密鑰和向量的元組 private(byte[]Key,byte[]IV)GenerateKeyAndIV(stringpassword){byte[]

9.aes加密解密速度

key=newbyte[32];byte[]iv=newbyte[16];byte[]hash=default;if(string.IsNullOrWhiteSpace(password))thrownew

10.aes256加密后的數(shù)據(jù)長度

Argument李敏鎬整容Exception("必須輸入口令!");using(SHA384sha=SHA384.Create()){byte[]buffer=Encoding.UTF8.GetBytes(password

);hash=sha.ComputeHash(buffer);}//用SHA384的原因:生成的384位哈希值正好被分成兩段使用(32+16)*8=384 Array.Copy(hash,0,key,0

,32);//生成256位密鑰(32*8=256) Array.Copy(hash,32,iv,0,16);//生成128位向量(16*8=128) re李敏鎬整容turn(Key:key,IV:iv);}public

byte[]EncryptByte(byte[]buffer,stringpassword){byte[]encrypted;using(Aesaes=Aes.Create()){//設定密鑰和向量 (

aes.Key,aes.IV)=GenerateKeyAndIV(password);//設定運算模式和填充模式 aes.Mode=CipherMode.CBC;//默認 aes.Padding=PaddingMode

.PKCS7;//默認 //創(chuàng)建加密器對象(加解密方法不同處僅李敏鎬整容僅這一句話) varencryptor=aes.CreateEncryptor(aes.Key,aes.IV);using(MemoryStream

msEncrypt=newMemoryStream()){using(CryptoStreamcsEncrypt=newCryptoStream(msEncrypt,encryptor,CryptoStreamMode

.Write))//選擇Write模式 {csEncrypt.Write(buffer,0,buffer.Length);//對原數(shù)組加密并寫入流中 csEncrypt.FlushFin李敏鎬整容alBlock();

//使用Write模式需要此句,但Read模式必須要有 encrypted=msEncrypt.ToArray();//從流中寫入數(shù)組(加密之后,數(shù)組變長,詳見方法AesCoreSingleTest內(nèi)容) 。

}}}returnencrypted;/* * 如果要將加密后的數(shù)組轉(zhuǎn)換為加密后的字符串顯示到文本框中,建議用法 * string s = Convert.ToBase64String(encrypted); 。

*/}publicbyte[]DecryptByte(byte[]buffer,李敏鎬整容stringpassword){/* * 如果要將顯示到文本框中的加密后的字符串還原為加密后的數(shù)組,建議用法。

* byte[] buffer = Convert.FromBase64String(encrypted); */byte[]decrypted;using

(Aesaes=Aes.Create()){//設定密鑰和向量 (aes.Key,aes.IV)=GenerateKeyAndIV(password);//設定運算模式和填充模式 aes.Mode=CipherMode

.CBC;//默認 aes.Padd李敏鎬整容ing=PaddingMode.PKCS7;//默認 //創(chuàng)建解密器對象(加解密方法不同處僅僅這一句話) vardecryptor=aes.CreateDecryptor

(aes.Key,aes.IV);using(MemoryStreammsDecrypt=newMemoryStream(buffer)){using(CryptoStreamcsDecrypt=new

CryptoStream(msDecrypt,decryptor,CryptoStreamMode.Read))//選擇Read模式 {byte[]buffer_T=newbyte李敏鎬整容[buffer.Length

];/*--s1:創(chuàng)建臨時數(shù)組,用于包含可用字節(jié)+無用字節(jié)--*/inti=csDecrypt.Read(buffer_T,0,buffer.Length);/*--s2:對加密數(shù)組進行解密,并通過i確定實際多少字節(jié)可用--*/

//csDecrypt.FlushFinalBlock();//使用Read模式不能有此句,但write模式必須要有 decrypted=newbyte[i];/*--s3:創(chuàng)建只容納可用字節(jié)的數(shù)組--*/。

Array.Copy(buffer_T,0,decrypted,0,i);/*--s4:從bufferT拷貝出可用字節(jié)到李敏鎬整容decrypted--*/}}returndecrypted;}}publicstatic

voidAesCoreSingleTest(strings_in,stringpassword)//驗證加密解密模塊正確性方法 {byte[]buffer=Encoding.UTF8.GetBytes(

s_in);AesSingleCoreaesCore=newAesSingleCore();byte[]buffer_ed=aesCore.EncryptByte(buffer,password);byte

[]buffer_ed2=aesCore.DecryptByte(buffer_ed,李敏鎬整容password);strings=Encoding.UTF8.GetString(buffer_ed2);string

s2="下列字符串\n"+s+\n+$"原buffer長度 → {buffer.Length}, 加密后buffer_ed長度 → {buffer_ed.Length}, 解密后buffer_ed2長度 → {buffer_ed2.Length}"

;MessageBox.Show(s2);varfilePath=@"D:\FireFox書簽\abc.txt";vardirectoryName=System.IO.Path.GetDirectoryName

(filePath);李敏鎬整容varfileNameWE=System.IO.Path.GetFileNameWithoutExtension(filePath);varfileExtension=System

.IO.Path.GetExtension(filePath);varfilename=fileNameWE+fileExtension;stringfilepath_new=System.IO.Path

.Combine(directoryName,filename);MessageBox.Show(filepath_new);/* 字符串在加密前后的變化(默認CipherMode.CBC運算模式, PaddingM李敏鎬整容ode.PKCS7填充模式)

* 1、如果數(shù)組長度為16的倍數(shù),則加密后的數(shù)組長度=原長度+16 如對于下列字符串 D:\User\Documents\Administrator - DOpus Config - 2020-06-301.ocb

使用UTF8編碼轉(zhuǎn)化為字節(jié)數(shù)組后, 原buffer → 64, 加密后buffer_ed → 80, 解密后buffer_ed2 → 64 * 2、如果數(shù)組長度不為16的倍數(shù),則加密后的數(shù)組長度=16倍數(shù)向上取整

如對于下列字符串 D:\User\Documents\cc_202李敏鎬整容00630_113921.reg 使用UTF8編碼轉(zhuǎn)化為字節(jié)數(shù)組后

原buffer → 40, 加密后buffer_ed → 48, 解密后buffer_ed2 → 40 參考文獻: 1-《AES補位填充PaddingMode.Zeros模式》http://blog.chinaunix.net/uid-29641438-id-5786927.html

2-《關于PKCS5Padding與PKCS7Padding的區(qū)別》https://www.cnblogs.com/midea0978/articles/1437257.html

3-《AES-128 E李敏鎬整容CB 加密有感》http://blog.sina.com.cn/s/blog_60cf051301015orf.html */

}publicenumActionDirection//該枚舉說明是加密還是解密 {EnCrypt,//加密 DeCrypt//解密 }/***---聲明CancellationTokenSource對象--***/

privateCancellationTokenSourcects;//using System.Threading;引用 publicTaskEnOrDecryptFileAs李敏鎬整容ync(StreaminStream

,longinStream_Seek,StreamoutStream,longoutStream_Seek,stringpassword,ActionDirectiondirection,IProgress

progress){/***---實例化CancellationTokenSource對象--***/cts?.Dispose();//cts為空,不動作,cts不為空,執(zhí)行Dispose cts

=newCancellationTokenSource();Taskmytask=newTask(()=>{EnOrDecryptFile(inS李敏鎬整容tream,inStream_Seek,outStream

,outStream_Seek,password,direction,progress);},cts.Token,TaskCreationOptions.LongRunning);mytask.Start

();returnmytask;}publicvoidCancel_EnOrDecryptFileAsync(){/***---執(zhí)行取消操作---***/cts?.Cancel();}privatevoid

EnOrDecryptFile(StreaminStream,longinStream_Seek,StreamoutStream,l李敏鎬整容ongoutStream_Seek,stringpassword,ActionDirection

direction,IProgressprogress){if(inStream==null||outStream==null)thrownewArgumentException("輸入流與輸出流是必須的"

);//--調(diào)整流的位置(通常是為了避開文件頭部分) inStream.Seek(inStream_Seek,SeekOrigin.Begin);outStream.Seek(outStream_Seek

,SeekOrigin.Begin);//用于記錄處理進度 l李敏鎬整容ongtotal_Length=inStream.Length-inStream_Seek;longtotalread_Length=0;//初始化報告進度

progress.Report(0);using(Aesaes=Aes.Create()){//設定密鑰和向量 (aes.Key,aes.IV)=GenerateKeyAndIV(password);//創(chuàng)建加密器解密器對象(加解密方法不同處僅僅這一句話)

ICryptoTransformcryptor;if(direction==ActionDirection.EnCrypt)cryptor=aes.CreateEncryp李敏鎬整容tor(aes.Key,aes

.IV);elsecryptor=aes.CreateDecryptor(aes.Key,aes.IV);using(CryptoStreamcstream=newCryptoStream(outStream

,cryptor,CryptoStreamMode.Write)){byte[]buffer=newbyte[512*1024];//每次讀取512kb的數(shù)據(jù) intreadLen=0;while((readLen

=inStream.Read(buffer,0,buffer.Length))!=0){// 向加密流寫入數(shù)據(jù) cs李敏鎬整容tream.Write(buffer,0,readLen);totalread_Length

+=readLen;//匯報處理進度 if(progress!=null){longper=100*totalread_Length/total_Length;progress.Report(Convert

.ToInt32(per));}}}}}}

標簽列表