隐写术之JPEG隐写——F5算法 & Jsteg算法

这篇具有很好参考价值的文章主要介绍了隐写术之JPEG隐写——F5算法 & Jsteg算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、问题描述

二、程序设计

1. 程序输入

2. 程序输出

3. 程序功能

三、程序实现原理

四、程序具体实现

1.模块设计

​编辑

2.程序测试与分析

3.代码附录

五、分析总结

一、问题描述

使用Jsteg和F5隐写算法对图像进行隐写与隐写分析

二、程序设计

1. 程序输入

task.m:标准图像Lena.tiff,供Jsteg算法隐藏的随机数据data1和供F5算法隐藏的随机数据data2;

Jsteg_in.m:隐藏数据data和载体图像矩阵cover;

Jsteg_out.m:载密图像矩阵stego和嵌入率ER;

F5_in.m:隐藏数据data和载体图像矩阵cover;

F5_out.m:载密图像矩阵stego和嵌入率ER;

2. 程序输出

task.m:由标准图像Lena.tiff生成的压缩图像,由Jsteg算法生成的伪装图像setgo1和由F5算法生成的伪装图像stego2;

Jsteg_in.m:载密图像矩阵stego;

Jsteg_out.m:提取出的秘密数据data;

F5_in.m:载密图像矩阵stego;

F5_out.m:提取出的秘密数据data;

3. 程序功能

task.m:生成不同质量因子qf下的压缩图像,调用Jsteg_in.m、Jsteg_out.m、F5_in.m、F5_out.m对标准图像Lena.tiff使用Jsteg算法和F5算法进行秘密信息嵌入和秘密信息提取;

Jsteg_in.m:使用Jsteg算法将秘密数据data嵌入载体图像cover中;

Jsteg_out.m:使用Jsteg算法从载密图像矩阵stego中提取出秘密数据data;

F5_in.m:使用F5算法将秘密数据data嵌入载体图像cover中;

F5_out.m:使用F5算法从载密图像矩阵stego中提取出秘密数据data。

三、程序实现原理

一、Jsteg算法

1. Jsteg是一种DCT系数的LSB嵌入方法;

2. Jsteg隐写方法将秘密信息嵌入在量化后的DCT系数的LSB上,原始值为−1、0、+1的DCT系数例外;

3. 提取时,也只是将含密图象中不等于−1、0、+1的量化DCT系数的LSB取出

优点:嵌入容量大、简单易实现

缺点:可以被卡方分析方法分析出来

f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉

如上图,可利用位置为(1,1)和(2,1)

二、F5算法

1. JPEG图象的DCT系数有下面两个特性:

(1)DCT系数的绝对值越大,其对应的直方图中的值就越小,也就是说出现的频率越低;

(2)随着系数绝对值的升高,其出现次数下降的幅度减小;

(3)不希望秘密信息的嵌入改动这些特性。

2. F5算法的步骤:

(1)进行JPEG压缩,量化DCT系数;

(2)伪随机置乱DCT系数,置乱方法作为密钥;

(3)确定k,并计算n=2k -1;

(4)嵌入数据:实施矩阵编码,修改DCT系数;

(5)逆混洗,产生隐写后的图象。

关键技术:矩阵编码(Hamming LSB)

3. 矩阵编码

(1)LSB隐写方案中嵌入1比特秘密信息有可能修改原数据,也有可能不修改原数据,且概率各为1/2,也就是说每个LSB的修改可以平均嵌入2比特秘密信息;

(2)矩阵编码的目的就是提高嵌入效率,使每个LSB修改可以嵌入更多的秘密比特;

(3)F5的矩阵编码:在2 k−1个原始数据的LSB中,嵌入k比特秘密信息,最多改动1比特;

(4)这种编码也称为Hamming隐写编码,因为嵌入和提取过程中使用了Hamming码的一致校验阵。

f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉

 

4. 矩阵编码在F5中的实现步骤:

(1)取出n个非0的DCT系数,用正奇数和负偶数代表1、负奇数和正偶数代表0,组成一 个向量a;

(2)取出待嵌入的k比特秘密数据,计算是否需要修改a,如果无需修改(r=0),则返回第 一步,继续下一组嵌入;

(3)如果需要修改(r不为0),将要改动的DCT系数绝对值减1,符号不变;需要检验修改 后的DCT系数为0:

如不为0,则返回第一步,继续下一组嵌入

如为0,则以上操作无效,要重新取出n个非0的DCT系数(原来的n个DCT系数中的一个变 为0,所以新取出的DCT系数包含原来的n−1个系数和一个真正新的DCT系数),再次嵌入这k比特秘密数据。

四、程序具体实现

1.模块设计

f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉

 f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉

f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉 

2.程序测试与分析

(1)局部性测试,只以标准图像Lena.tiff为载体图像

1.调用getJPEG.m函数对标准图像Lena.tiff在不同质量因子QF上进行压缩生成压缩图像。

2.对不同质量因子QF的压缩图像在不同嵌入率ER下分别使用Jsteg算法和F5算法对数据进行嵌入。

3.通过Jsteg_out函数和F5_out函数将由Jsteg算法和F5算法生成的载密图像进行数据提取。

4.对比提取数据和嵌入数据的一致性

 f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉

 f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉

f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉 

5. 对比不同质量因子QF和不同嵌入率ER和不同嵌入算法产生的载密图像与载体压缩图像的PSNR值 

 

f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉

 图1

f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉

图2

(2)一般性测试,以整个标准图像库里的图像作为载体图像【2.tiff~10.tiff】

由于测试范围变大,此处测试过程中存在一部分提取数据与嵌入数据不一致的情况,但其不一致的数目较少,猜测是由于在量化过程中取整操作带来的误差。

 f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉

f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉 

f5算法,隐写分析和数字水印,图像处理,matlab,计算机视觉 

由于使用了整个标准库图像作为载体图像,因此生成的PSNR值过多不方便使用图像的方式进行展示,因此在全局性测试中未展示出来。

3.代码附录

task.m

%% 初始环境
clc
clear
close all
p=zeros(9,15,2);            %存储psnr值
k1=1;
cover=imread('Lena.tiff');
[h,w]=size(cover);
max_len=(h/8)*(w/8);
ER_max=max_len/(h*w);       %只能保证每8*8的方块中最少存在一个非零值,现在最大嵌入率

%% 生成Lena图像的压缩图像,质量因子qf取10:10:90
filename='Lena';
for QF=10:5:100
    ImgName=getJPEG(filename,QF);  %返回生成jpg文件名称
    %% 读取生成的压缩图像的数据
    cover=imread(ImgName);
    [h,w]=size(cover);
    k2=1;
    disp("质量因子QF=");QF
    for ER=0.001:0.001:ER_max
        disp("嵌入率ER=");ER
        data_len=floor(ER*(h*w));                       %总嵌入长度为data_len比特
        data1=round(rand(data_len,1));                  %随机数为2进制数,即一个数占1bit,总嵌入长度为data_len比特
        data2=round(rand(floor(data_len/3),1)*7);       %随机数为8进制数,即一个数占3bit,总嵌入长度为data_len比特
        %     figure();
        %     subplot(1,3,1);
        %     title("原始图像")
        %     imshow(cover);
        %% Jsteg隐写
        stego1 = JPEG_in(cover,data1);
        %     subplot(1,3,2);
        %     imshow(stego1);
        
        %% Jsteg提取并将嵌入数据与提取数据进行对比
        extract1=JPEG_out(stego1,ER);
        if isequal(data1,extract1)
            disp("jpeg嵌入的数据与提取的数据完全一致");
        end

        %% F5隐写
        stego2 = F5_in(cover,data2);
        %     subplot(1,3,3);
        %     imshow(stego2);

        %% F5提取并将嵌入数据与提取数据进行对比
        extract2=F5_out(stego2,ER);
        if isequal(data2,extract2)
            disp("F5嵌入的数据与提取的数据完全一致");
        end

        %% 对比两种算法嵌入后图像的视觉效果(PSNR值)
        p(k1,k2,1)=psnr(cover,stego1);      %Jsteg算法
        p(k1,k2,2)=psnr(cover,stego2);      %F5算法
        k2=k2+1;
    end
    k1=k1+1;
end
%% 画图展示
color=["r-","g-","b-","c-","m-","y-","k-","r+","g+"];
figure();
plot(0.001:0.001:ER_max,p(1,:,1),color(1));
for i=2:9
    hold on;
    plot(0.001:0.001:ER_max,p(i,:,1),color(i));
end
legend(["QF=10","QF=20","QF=30","QF=40","QF=50","QF=60","QF=70","QF=80","QF=90"]);
xlabel("ER");
ylabel("PSNR");
title("Jsteg算法");

figure();
plot(0.001:0.001:ER_max,p(1,:,2),color(1));
for i=2:9
    hold on;
    plot(0.001:0.001:ER_max,p(i,:,2),color(i));
end
legend(["QF=10","QF=20","QF=30","QF=40","QF=50","QF=60","QF=70","QF=80","QF=90"]);
xlabel("ER");
ylabel("PSNR");
title("F5算法");

task_su.m 

%% 初始环境
clc
clear
close all

%% 以整个标准库图像作为载体图像
for k=2:10
    filename=[num2str(k),'/',num2str(k)];
    cover=imread([filename,'.tiff']);
    [h,w]=size(cover);
    max_len=(h/8)*(w/8);
    ER_max=max_len/(h*w);       %只能保证每8*8的方块中最少存在一个非零值,现在最大嵌入率
    for QF=10:5:100
        ImgName=getJPEG(filename,QF);  %返回生成jpg文件名称
        %% 读取生成的压缩图像的数据
        cover=imread(ImgName);
        [h,w]=size(cover);
        k2=1;
        disp("质量因子QF=");QF
        for ER=0.001:0.001:ER_max
            disp("嵌入率ER=");ER
            data_len=floor(ER*(h*w));                       %总嵌入长度为data_len比特
            data1=round(rand(data_len,1));                  %随机数为2进制数,即一个数占1bit,总嵌入长度为data_len比特
            data2=round(rand(floor(data_len/3),1)*7);       %随机数为8进制数,即一个数占3bit,总嵌入长度为data_len比特
            %     figure();
            %     subplot(1,3,1);
            %     title("原始图像")
            %     imshow(cover);
            %% Jsteg隐写
            stego1 = JPEG_in(cover,data1);
            %     subplot(1,3,2);
            %     imshow(stego1);

            %% Jsteg提取并将嵌入数据与提取数据进行对比
            extract1=JPEG_out(stego1,ER);
            extract1=uint8(extract1);
            data1=uint8(data1);
            if isequal(data1,extract1)
                disp("jpeg嵌入的数据与提取的数据完全一致");
            else
                disp("jpeg嵌入的数据与提取的数据不完全一致");
                [sit,~]=find((data1==extract1)==0)
            end

            %% F5隐写
            stego2 = F5_in(cover,data2);
            %     subplot(1,3,3);
            %     imshow(stego2);

            %% F5提取并将嵌入数据与提取数据进行对比
            extract2=F5_out(stego2,ER);
            extract2=uint8(extract2);
            data2=uint8(data2);
            if isequal(data2,extract2)
                disp("F5嵌入的数据与提取的数据完全一致");
            else
                disp("F5嵌入的数据与提取的数据不完全一致");
                [sit,~]=find((data2==extract2)==0)
            end
        end
    end
end

psnr.m

function psnrvalue=psnr(origin,test)
%得到图像origin和test 的PSNR
I1=double(origin);
I2=double(test);
E=I1-I2;
MSE=mean2(E.*E);
if MSE==0
    psnrvalue=-1;
else
    psnrvalue=10*log10(255*255/MSE);
end

 Jsteg_in.m

function stego = Jsteg_in(cover,data)
% 使用jpeg进行信息藏入
%% 标准量化表
Q=[16 11 10 16 24 40 51 61
    12 12 14 19 26 58 60 55
    14 13 16 24 40 57 69 56
    14 17 22 29 51 87 80 62
    18 22 37 56 68 109 103 77
    24 35 55 64 81 104 113 92
    49 64 78 87 103 121 120 101
    72 92 95 98 112 100 103 99];
%% 初始化,DCT转换和量化
[h,w]=size(cover);
data_len=numel(data);
D=zeros(h,w);       %零时存储矩阵
for i=1:h/8
    for j=1:w/8
        D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=dct2(cover(8*(i-1)+1:8*i,8*(j-1)+1:8*j));
        D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=round(D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)./Q);
    end
end

%% LSB嵌入
stego=D;
num=1;      %表示data的嵌入进度
for i=1:h
    for j=1:w
        if(abs(D(i,j))>1)
            if(D(i,j)>1)
                stego(i,j)=bitset(D(i,j),1,data(num));
            else
                stego(i,j)=bitset(-D(i,j),1,data(num));
                stego(i,j)=-stego(i,j);
            end
            num=num+1;
        end
        if(num>data_len)
            break;
        end
    end
    if(num>data_len)
        break;
    end
end
%% DCT转换,转换成伪装图像
for i=1:h/8
    for j=1:w/8
        stego(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=stego(8*(i-1)+1:8*i,8*(j-1)+1:8*j).*Q;
        stego(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=idct2(stego(8*(i-1)+1:8*i,8*(j-1)+1:8*j));
    end
end
stego=uint8(stego);

Jsteg_out.m 

function extract = Jsteg_out(stego,ER)
%jpeg提取秘密信息
%% 标准量化表
Q=[16 11 10 16 24 40 51 61
    12 12 14 19 26 58 60 55
    14 13 16 24 40 57 69 56
    14 17 22 29 51 87 80 62
    18 22 37 56 68 109 103 77
    24 35 55 64 81 104 113 92
    49 64 78 87 103 121 120 101
    72 92 95 98 112 100 103 99];
[h,w]=size(stego);
data_len=floor(ER*h*w);
extract=zeros(data_len,1);
%% 数据提取,DCT转换和量化
D=zeros(h,w);       %零时存储矩阵
for i=1:h/8
    for j=1:w/8
        D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=dct2(stego(8*(i-1)+1:8*i,8*(j-1)+1:8*j));
        D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=round(D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)./Q);
    end
end
%% 数据提取
num=1;      %表示data的提取进度
for i=1:h
    for j=1:w
        if(abs(D(i,j))>1)       %即不为-1,0,1
            extract(num,1)=bitget(abs(D(i,j)),1);
            num=num+1;
        end
        if(num>data_len)
            break;
        end
    end
    if(num>data_len)
        break;
    end
end
extract=logical(extract);

 F5_in.m

function stego = F5_in(cover,data)
% 使用F5进行信息藏入
%% 标准量化表
Q=[16 11 10 16 24 40 51 61
    12 12 14 19 26 58 60 55
    14 13 16 24 40 57 69 56
    14 17 22 29 51 87 80 62
    18 22 37 56 68 109 103 77
    24 35 55 64 81 104 113 92
    49 64 78 87 103 121 120 101
    72 92 95 98 112 100 103 99];
M=[0 0 0 1 1 1 1
    0 1 1 0 0 1 1
    1 0 1 0 1 0 1];   %校验矩阵
data_len=numel(data);
%% 初始化,DCT转换和量化
[h,w]=size(cover);
D=zeros(h,w);           %零时存储矩阵
for i=1:h/8
    for j=1:w/8
        D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=dct2(cover(8*(i-1)+1:8*i,8*(j-1)+1:8*j));
        D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=round(D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)./Q);
    end
end
%% 嵌入data(k)
stego=D;
num=1;          %记录目前已经嵌入的data数量
a=zeros(7,1);
k=1;            %记录当前7个数值中已取数量
sit=zeros(7,2); %记录当前7个数在stego中的位置
for i=1:h
    for j=1:w
        if (D(i,j)>0 && mod(D(i,j),2)==1)||(D(i,j)<0 && mod(D(i,j),2)==0)        %正奇数或负偶数为1
            a(k)=1;
            sit(k,1)=i;
            sit(k,2)=j;
            k=k+1;
        elseif (D(i,j)<0 && mod(D(i,j),2)==1)||(D(i,j)>0 && mod(D(i,j),2)==0)    %负奇数或正偶数为0
            a(k)=0;
            sit(k,1)=i;
            sit(k,2)=j;
            k=k+1;
        end
        if(k>7)
            data_bit=[bitget(data(num),3),bitget(data(num),2),bitget(data(num),1)]';  %8进制转换为2进制
            temp=M*a;
            temp=mod(temp,2);
            n=bitxor(data_bit,temp);      %异或
            n=n(1)*4+n(2)*2+n(3);
            %% 修改第n位的DCT值
            if n>0      %需要修改,否则不需要修改
                if D(sit(n,1),sit(n,2))<0
                    stego(sit(n,1),sit(n,2))=D(sit(n,1),sit(n,2))+1;
                elseif D(sit(n,1),sit(n,2))>0
                    stego(sit(n,1),sit(n,2))=D(sit(n,1),sit(n,2))-1;
                end
                %% 检查修改过后的DCT值是否为0,若为0则重新选择1位数据作为载体信号
                if stego(sit(n,1),sit(n,2))==0
                    k=k-1;
                    sit(n:k-1,:)=sit(n+1:k,:);
                    a(n:k-1)=a(n+1:k);
                    continue;
                end
            end
            num=num+1;
            k=1;
        end
        if(num>data_len)
            break;
        end
    end
    if(num>data_len)
        break;
    end
end
%% DCT转换,转换成伪装图像
for i=1:h/8
    for j=1:w/8
        stego(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=stego(8*(i-1)+1:8*i,8*(j-1)+1:8*j).*Q;
        stego(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=idct2(stego(8*(i-1)+1:8*i,8*(j-1)+1:8*j));
    end
end
stego=uint8(stego);

  F5_out.m

function extract = F5_out(stego,ER)
%% 初始化
Q=[16 11 10 16 24 40 51 61
    12 12 14 19 26 58 60 55
    14 13 16 24 40 57 69 56
    14 17 22 29 51 87 80 62
    18 22 37 56 68 109 103 77
    24 35 55 64 81 104 113 92
    49 64 78 87 103 121 120 101
    72 92 95 98 112 100 103 99]; %标准量化表
[h,w]=size(stego);
M=[0 0 0 1 1 1 1
    0 1 1 0 0 1 1
    1 0 1 0 1 0 1];     %校验矩阵
data_len=floor(h*w*ER/3);
D=zeros(h,w);           %零时存储矩阵
%% DCT转换和量化
for i=1:h/8
    for j=1:w/8
        D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=dct2(stego(8*(i-1)+1:8*i,8*(j-1)+1:8*j));
        D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=round(D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)./Q);
    end
end
%% 数据提取
num=1;          %记录目前已经嵌入的data数量
a=zeros(7,1);
k=1;            %记录当前7个数值中已取数量
for i=1:h
    for j=1:w
        if (D(i,j)>0 && mod(D(i,j),2)==1)||(D(i,j)<0 && mod(D(i,j),2)==0)        %正奇数或负偶数为1
            a(k)=1;
            k=k+1;
        elseif (D(i,j)<0 && mod(D(i,j),2)==1)||(D(i,j)>0 && mod(D(i,j),2)==0)    %负奇数或正偶数为0
            a(k)=0;
            k=k+1;
        end
        if k>7  %表示集满7个数据
            temp=M*a;
            temp=mod(temp,2);
            extract(num,1)=temp(1)*4+temp(2)*2+temp(3);
            num=num+1;
            k=1;
        end
        if num>data_len
            break;
        end
    end
    if num>data_len
        break;
    end
end

 getJPEG.m

function [ImgName] = getJPEG(filename,qf)
%输入空域图像对应的文件名和质量因子,输出对应质量因子的JPEG图像,返回生成jpg文件名称
ImgStr=filename;
ImgName=[ImgStr,'_',num2str(qf),'.jpg'];
ImgData=imread([ImgStr,'.tiff']);
imwrite(ImgData,ImgName,'JPEG','Quality',qf);
end

五、分析总结

1. 通过task.m主函数(局部性测试)对比不同质量因子QF和不同嵌入率ER和不同嵌入算法产生的载密图像与载体压缩图像的PSNR值可以发现,质量因子QF为10/40/90时进行数据嵌入使得原图像与载密图像的视觉差距最小;

2. 通过task_su.m主函数(全局性测试)发现,不论是使用Jsteg算法还是F5算法都存在嵌入和提取过程中的细微误差,猜测此项误差是由DCT系数在量化中取整所造成的,而具体不一致的情况随图像的不同也有所不同。文章来源地址https://www.toymoban.com/news/detail-611076.html

 

到了这里,关于隐写术之JPEG隐写——F5算法 & Jsteg算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像处理之《隐写网络的隐写术》论文阅读

    一、文章摘要 隐写术是一种在双方之间进行秘密通信的技术。随着深度神经网络(DNN)的快速发展,近年来越来越多的隐写网络被提出,并显示出良好的性能。与传统的手工隐写工具不同,隐写网络的规模相对较大。如何在公共信道上秘密传输隐写网络引起了人们的关注,这是

    2024年02月19日
    浏览(34)
  • F5负载均衡

    1.什么是F5负载均衡 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。需要说明的是:负载均衡设备不是基础网络设备,而是一种性能优化设备。对于网络

    2024年02月12日
    浏览(23)
  • 信息安全复习四:置换密码&乘积密码&隐写术

    置换密码、Rail Fence密码、行置换密码、乘积密码、转子机、隐写术 重新排列明文字母,达到信息加密的目的。 与替代密码不同的是,原来明文中的字母同样出现在密文中,只是顺序被打断。 古典的置换密码的例子:Rail Fence密码、行置换密码、乘积密码、转子机、隐写术 羊

    2024年02月10日
    浏览(80)
  • LabVIEW使用边缘检测技术实现彩色图像隐写术

    LabVIEW使用边缘检测技术实现彩色图像隐写术 隐写术是隐藏信息的做法,以隐瞒通信的存在而闻名。该技术涉及在适当的载体(如图像,音频或视频)中插入秘密消息。在这些载体中,数字图像因其在互联网上的广泛使用而受到青睐。LabVIEW软件已用于执行隐写术。本文解释了

    2024年02月13日
    浏览(38)
  • 基于DNA的密码学和隐写术综述

    摘要 本文全面调研了不同的脱氧核糖核酸(DNA)-基于密码学和隐写术技术。基于DNA的密码学是一个新兴领域, 利用DNA分子的大规模并行性和巨大的存储容量来编码和解码信息。 近年来,由于其相对传统密码学方法的潜在优势,如高存储容量、低错误率和对环境因素的抗性,

    2024年01月16日
    浏览(40)
  • F5服务器负载均衡能力如何?一文了解

    但凡知道服务器负载均衡这个名词的,基本都知道 F5,因为负载均衡是 F5 的代表作,换句话来说,负载均衡就是由 F5 发明的。提到F5服务器负载均衡能力如何?不得不关注F5提出的关于安全、网络全面优化的解决方案,在其分布式云的产品中,全局F5服务器负载均衡的优势得

    2024年02月09日
    浏览(39)
  • 阿里云服务器F5负载均衡设置说明

    阿里云服务器F5负载均衡怎么设置?F5负载均衡和云服务器ECS绑定教程,先创建F5负载均衡器,然后创建后端服务器组,最后配置监听即可。可以设置IPv4和IPv6的负载均衡。阿里云服务器网aliyunfuwuqi.com整理 阿里云服务器F5负载均衡设置 教程,详细参考阿里云负载均衡页面:al

    2024年04月11日
    浏览(44)
  • F5负载均衡系列教程六【配置virtual Server】

    基础拓扑如下所示,其中服务器网段对外提供HTTP、HTTPS、FTP、SSH等相关服务   一、配置VS的注意要点 后端服务器是否提供了特定的monitor,这个影响是否需要配置特定的monitor探测 后端服务器是否需要配置优先级组 进行负载均衡时候是否需要使用特定的负载均衡算法 虚拟服务

    2024年04月08日
    浏览(34)
  • F5 BIG-IP LTM基础资料

    TMOS是一个全代理的体系结构 Ø 流量必须穿越BIG-IP设备以获得TMOS的优化效果 部署方式 路由模式 Ø 也被称作串联模式 Ø 真实服务器放在BIG-IP之后的一个内部网络 Ø 真实服务器的网关需要指向(或者最终通过)BIG-IP Ø Virtual Server需在发布在外网网段,客户端才能通过BIG-IP访问

    2023年04月10日
    浏览(38)
  • F5 LTM 知识点和实验 4-持久化

    持久化: 大多数应用都是有状态的,比如,使用一个购物网站,最重要的是用户在放入一个商品之后,刷新网页要能继续看到购物车里的东西,这就需要请求报文发到同一个后端服务器上,持久化就能完成这个功能。 持久化支持一下几种场景: 源地址 目标地址 SSL SIP Hash 通

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包