cuốn sách gpt4 ai đã làm

c# - Blowfish ngoại lệ độ dài không hợp lệ

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 20:23:23 31 4
mua khóa gpt4 Nike

Tôi đang mã hóa các tập tin của mình bằng thuật toán Blowfish, nhưng dường như tôi không thể hiểu được. bất cứ khi nào tôi cố gắng Bộ mã hóa() , nó sẽ đưa ra một ngoại lệ, nhắc nhở "độ dài không hợp lệ". Tôi nghĩ khi là modulo 8, độ dài phải bằng 0, điều này tôi nghĩ có nghĩa là phải có luồng khối 8 x 8 để bắt đầu mã hóa. tôi phải làm gì?

Phương pháp mã hóa Blowfish:

public void Encipher(byte[] data, int length)
{
uint xl, xr;
if ((length % 8) != 0) <-- Dòng ngoại lệ
ném ngoại lệ mới ("Độ dài không hợp lệ");
vì (int i = 0; i < chiều dài; i += 8)
{
// Mã hóa dữ liệu theo khối 8 byte.
xl = (uint)((data[i] << 24) | (data[i + 1] << 16) | (data[i + 2] << 8) | data[i + 3]);
xr = (uint)((data[i + 4] << 24) | (data[i + 5] << 16) | (data[i + 6] << 8) | data[i + 7]);
Mã hóa(ref xl, ref xr);
// Bây giờ Thay thế dữ liệu.
dữ liệu[i] = (byte)(xl >> 24);
dữ liệu[i + 1] = (byte)(xl >> 16);
dữ liệu[i + 2] = (byte)(xl >> 8);
dữ liệu[i + 3] = (byte)(xl);
dữ liệu[i + 4] = (byte)(xr >> 24);
dữ liệu[i + 5] = (byte)(xr >> 16);
dữ liệu[i + 6] = (byte)(xr >> 8);
dữ liệu[i + 7] = (byte)(xr);
}
}

Phương pháp mã hóa của tôi:

void riêng tư EncryptFile(chuỗi szFilePath, chuỗi szInfoFile, chuỗi szKey, chuỗi szEncryptedFile = "")
{
// Cá nóc
Blowfish alg = new Blowfish(Encoding.Unicode.GetBytes(szKey));

// Mở tập tin
System.IO.FileStream originalStream = System.IO.File.OpenRead(szFilePath);

// Lưu trữ độ dài file gốc
dài gốcLength = originalStream.Length;
System.IO.File.WriteAllText(szInfoFile, originalLength.ToString());

Bộ đệm Byte[] = byte mới[originStream.Length + (originStream.Length % 8)];
originalStream.Read(buffer, 0, buffer.Length);
originalStream.Close();

// Mã hóa
alg.Encipher(buffer, buffer.Length);

chuỗi szEncFile;

if (szEncryptedFile != string.Empty) szEncFile = szEncryptedFile; nếu không thì szEncFile = szFilePath;

Luồng System.IO.FileStream = System.IO.FileStream mới (szEncFile, System.IO.FileMode.Create);
Stream.Write(buffer, 0, buffer.Length);
stream.Close();
}

Cảm ơn.

câu trả lời hay nhất

Nếu điều bạn muốn làm là làm tròn một giá trị thành giá trị tiếp theo chia hết cho 8 thì thay vào đó bạn nên làm như sau:

Bộ đệm Byte[] = byte mới[originStream.Length + (8-(originStream.Length % 8))];

Về c# - ngoại lệ độ dài không hợp lệ của Blowfish, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/12143873/

31 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress