Đối với dự án của tôi, tôi đã sử dụng bản đồ Henon để tạo số ngẫu nhiên (giả). Tôi đã sử dụng đoạn mã sau để tạo ma trận của số ngẫu nhiên (giả).
def generate_by_henonmap(thứ nguyên, khóa):
x = khóa[0]
y = khóa[1]
# Tổng số bitSequence được tạo
SequenceSize = thứ nguyên * thứ nguyên * 8
bitSequence = [] # Mỗi bitSequence chứa 8 bit
byteArray = [] # Mỗi byteArray chứa m bitSequence
Matrix = [] # Mỗi Matrix chứa m*n byteArray
cho tôi trong phạm vi (sequenceSize):
# Bản đồ Henon cổ điển có giá trị a = 1,4 và b = 0,3
xN = y + 1 - 1,4 * x**2
yN = 0,3 * x
x = xN
y = yN
nếu xN <= 0,4:
bit = 0
khác:
chút = 1
cố gắng:
bitSequence.append(bit)
ngoại trừ:
bitSequence = [bit]
nếu tôi % 8 == 7:
thập phân = tháng mười hai (bitSequence)
cố gắng:
byteArray.append(thập phân)
ngoại trừ:
byteArray = [thập phân]
bitSequence = []
byteArraySize = kích thước * 8
nếu tôi % byteArraySize == byteArraySize-1:
cố gắng:
Matrix.append(byteArray)
ngoại trừ:
Ma trận = [byteArray]
byteArray = []
trả về ma trận
Trước khi tôi sử dụng mã này trong quá trình sản xuất của mình, tôi đã kiểm tra tính ngẫu nhiên bằng bộ Kiểm tra NIST từ cái này nhưng nhận được kết quả này:
Kiểm tra đủ điều kiện từ NIST-SP800-22r1a:
-monobit
-tần số_trong_khối
-chạy
-longest_run_ones_in_a_block
-dft
-non_overlaping_template_matching
- nối tiếp
-approximate_entropy
-số tiền tích lũy
-random_excursion
-random_excursion_variant
Kết quả kiểm tra:
- PASSED - điểm: 0,525 - Monobit - thời gian đã trôi qua: 0 ms
- PASSED - điểm: 0,999 - Tần suất trong khối - thời gian trôi qua: 0 ms
- FAILED - điểm số: 0,0 - Số lần chạy - thời gian đã trôi qua: 1 ms
- KHÔNG ĐẠT - điểm số: 0,002 - Lượt chạy lâu nhất trong một khối - thời gian trôi qua: 0 ms
- KHÔNG THÀNH CÔNG - điểm số: 0,004 - Biến đổi Fourier rời rạc - thời gian trôi qua: 2 ms
- ĐẠT - điểm: 0,899 - Khớp mẫu không trùng lặp - thời gian đã trôi qua: 8 ms
- FAILED - điểm số: 0,0 - Nối tiếp - thời gian trôi qua: 54 ms
- KHÔNG THÀNH CÔNG - điểm số: 0,0 - Entropy gần đúng - thời gian trôi qua: 102 ms
- PASSED - điểm: 0,887 - Tổng tích lũy - thời gian trôi qua: 4 ms
- KHÔNG ĐẠT - điểm số: 0,11 - Tham quan ngẫu nhiên - thời gian đã trôi qua: 28 ms
- ĐÃ ĐẠT - điểm: 0,678 - Biến thể Tham quan Ngẫu nhiên - thời gian đã trôi qua: 1 ms
Tôi đã nghĩ bản đồ Chaotic có thể tạo ra đủ sự ngẫu nhiên nhưng kết quả thật khó chịu. Có bất kỳ lỗi logic nào bên trong mã tạo ra kết quả kém này không? Tôi đoán cách nó tạo chuỗi bit của số tạo ra sự cố.
nếu xN <= 0,4:
bit = 0
khác:
chút = 1
Có triển khai bản đồ hỗn loạn nào tốt hơn để tạo số ngẫu nhiên (giả) không?