Gần đây tôi đã chọn một bản sao của Mật mã ứng dụng của Bruce Schneier và nó đã được đọc tốt. Bây giờ tôi đã hiểu cách một số thuật toán được nêu trong tác phẩm sách và tôi muốn bắt đầu triển khai một số thuật toán trong C.Có gì xấu khi chuyển một biến 32 bit 32 bit?
Một điều mà nhiều thuật toán có chung là chia khóa x-bit thành một số phím y-bit nhỏ hơn. Ví dụ, khóa Blowfish, X, là 64 bit, nhưng bạn được yêu cầu chia nó thành hai nửa 32 bit; Xl và Xr.
Đây là nơi tôi bị kẹt. Tôi khá tốt với C, nhưng tôi không phải là mạnh nhất khi nói đến các nhà khai thác bitwise và muốn.
Sau khi một số giúp đỡ về IRC, tôi quản lý để đưa ra hai macro sau đây:
#define splitup(a, b, c) {b = a >> 32; c = a & 0xffffffff; }
#define combine(a, b, c) {a = (c << 32) | a;}
Trường hợp là 64 bit và b và c là 32 bit. Tuy nhiên, trình biên dịch cảnh báo tôi về thực tế là tôi đang chuyển một biến 32 bit 32 bit.
Câu hỏi của tôi là những:
- gì xấu về chuyển một 32-bit biến 32 bit? Tôi đoán nó không xác định, nhưng các macro này dường như đang hoạt động.
- Ngoài ra, bạn có đề xuất tôi nên thực hiện theo cách này không?
Như tôi đã nói, tôi khá quen thuộc với C, nhưng các nhà khai thác bitwise và những thứ tương tự vẫn khiến tôi đau đầu.
EDIT
tôi đã tìm ra rằng kết hợp vĩ mô của tôi đã không thực sự kết hợp hai biến 32-bit, mà chỉ đơn giản ORing 0 bởi một, và nhận được một kết quả là.
Vì vậy, trên các câu hỏi trước của tôi, tôi vẫn không có phương pháp kết hợp hai biến 32 bit để có được một biến 64 bit; một gợi ý về cách làm điều đó sẽ được đánh giá cao.
+1, câu hỏi hay, cảm ơn bạn đã dành thời gian định dạng chính xác và chào mừng bạn đến với Stack Overflow! –
Nhân tiện, tôi đặt cược macro kết hợp của bạn được cho là ORING với b chứ không phải a, phải không? – tloflin