當前位置:首頁 » 操作系統 » javasm3演算法

javasm3演算法

發布時間: 2022-05-03 16:49:30

① 國密演算法java怎麼調用

國密演算法是國家密碼局制定標準的一系列演算法。其中包括了對稱加密演算法,橢圓曲線非對稱加密演算法,雜湊演算法。具體包括SM1,SM2,SM3等,其中: SM2為國家密碼管理局公布的公鑰演算法,其加密強度為256位。

② 國密演算法指的是什麼

國密演算法是國家密碼局制定標準的一系列演算法。其中包括了對稱加密演算法,橢圓曲線非對稱加密演算法,雜湊演算法。具體包括SM1,SM2,SM3等,其中:

SM2為國家密碼管理局公布的公鑰演算法,其加密強度為256位。

SM1,對稱加密演算法,加密強度為128位,採用硬體實現。

SM3,密碼雜湊演算法,雜湊值長度為32位元組,和SM2演算法同期公布,參見《國家密碼管理局公告(第 22 號)》。

SMS4,對稱加密演算法,隨WAPI標准一起公布,可使用軟體實現,加密強度為128位。

應用舉例:

在門禁應用中,採用SM1演算法進行身份鑒別和數據加密通訊,實現卡片合法性的驗證,保證身份識別的真實性。 安全是關系國家、城市信息、行業用戶、百姓利益的關鍵問題。

國家密碼管理局針對現有重要門禁系統建設和升級改造應用也提出指導意見,加強晶元、卡片、系統的標准化建設。截止目前,國密門禁系統的升級的案例也逐漸增多,基於自主國產知識產權的CPU卡、CPU卡讀寫設備及密鑰管理系統廣泛受到關注。

③ 安全哈希演算法sha1和sm3演算法的區別

sha1是一種雜湊演算法,通俗的說即對數據使用sha1演算法進行計算,得到的結果就是sha1值(校驗值),可用於數字簽名、驗簽。
sm3是國密演算法,2010年國家密碼管理局發布,也是一種雜湊演算法,功能和sha1演算法相似,但演算法實現不一樣,破解難度比sha1更大,能達到sha256的水平(sha256是比特幣的加密方式),也可用於數字簽名、驗簽。

④ SM演算法是如何獲得國際認可

眾所周知,為了保障商用密碼的安全性,國家商用密碼管理辦公室制定了一系列密碼標准,為了以後獲得國際認可和認同。SM演算法包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖沖之密碼演算法(ZUC)那等等。其中SM1、SM4、SM7、祖沖之密碼(ZUC)是對稱演算法;SM2、SM9是非對稱演算法;SM3是哈希演算法。目前,這些演算法已廣泛應用於各個領域當中,期待有一天會有採用國密演算法的區塊鏈應用出現。其中SM1、SM7演算法不公開,調用該演算法時,需要通過加密晶元的介面進行調用;比較少的人了解這些演算法的使用方式,在這里對這些國密演算法做一下簡單的科普。SM1 演算法是分組密碼演算法,分組長度為128位,密鑰長度都為 128 比特,演算法安全保密強度及相關軟硬體實現性能與 AES 相當,演算法不公開,僅以IP核的形式存在於晶元中。採用該演算法已經研製了系列晶元、智能IC卡、智能密碼鑰匙、加密卡、加密機等安全產品,廣泛應用於電子政務、電子商務及國民經濟的各個應用領域(包括國家政務通、警務通等重要領域)。SM7演算法,是一種分組密碼的演算法,分組長度一般為128比特,密鑰長度為128比特。SM7適用於非接觸式IC卡,應用包括身份識別類應用(門禁卡類、工作證、參賽證),票務類應用(大型賽事門票、展會門票),支付與通卡類應用(積分消費卡、校園一卡通、企業一卡通等)。

⑤ 國密演算法是什麼是一種演算法還是一類演算法若為一類演算法,都包含什麼

國密演算法,國家密碼局認定的國產密碼演算法,即商用密碼。

國密演算法是國家密碼局制定標準的一系列演算法。其中包括了對稱加密演算法,橢圓曲線非對稱加密演算法,雜湊演算法。具體包括SM1,SM2,SM3等。

SM1,對稱加密演算法,加密強度為128位,採用硬體實現。

SM2,國家密碼管理局公布的公鑰演算法,其加密強度為256位。

SM3,密碼雜湊演算法,雜湊值長度為32位元組。



(5)javasm3演算法擴展閱讀

商用密碼的應用領域十分廣泛,主要用於對不涉及國家秘密內容但又具有敏感性的內部信息、行政事務信息、經濟信息等進行加密保護。比如:商用密碼可用於企業門禁管理、企業內部的各類敏感信息的傳輸加密、存儲加密,防止非法第三方獲取信息內容;也可用於各種安全認證、網上銀行、數字簽名等。

例如:在門禁應用中,採用SM1演算法進行身份鑒別和數據加密通訊,實現卡片合法性的驗證,保證身份識別的真實性。 安全是關系國家、城市信息、行業用戶、百姓利益的關鍵問題。

國家密碼管理局針對現有重要門禁系統建設和升級改造應用也提出指導意見,加強晶元、卡片、系統的標准化建設。國密門禁系統的升級的案例也逐漸增多,基於自主國產知識產權的CPU卡、CPU卡讀寫設備及密鑰管理系統廣泛受到關注。

⑥ SM3密碼雜湊演算法的壓縮函數一共多少輪

16+48=64輪...

⑦ 演算法與數據結構程序設計的問題!急啊!求幫忙

#include<stdio.h>
#include "iostream.h"
#include "stdlib.h"
#include<malloc.h>
#define MAXSIZE 12500

typedef struct {
int e;
int i,j;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;

void InitTSM(TSMatrix &M);
void ShowTSM(TSMatrix &M);
void NormalTSMatrix(TSMatrix &M,TSMatrix &T);
void QuickTSM(TSMatrix &M,TSMatrix &T);
void SeqAdd(TSMatrix &a,TSMatrix &b,TSMatrix *c);
void Seqjian(TSMatrix &a,TSMatrix &b,TSMatrix *c);
void multsmatrix(TSMatrix &M,TSMatrix &N,TSMatrix *T);

void main()
{
int i;
TSMatrix sm,sm1,sm2,sm3,tsm;

cout<<"***********************************"<<endl;
InitTSM(sm);
cout<<""<<endl;
cout<<"**********************************"<<endl;
ShowTSM(sm);
cout<<""<<endl;
cout<<""<<endl;
do{
cout<<"**********************************"<<endl;
cout<<"請選擇你想要的操作"<<endl;
cout<<""<<endl;
cout<<"1 矩陣相加"<<endl;
cout<<"2 矩陣想減"<<endl;
cout<<"3 矩陣相乘"<<endl;
cout<<"4 一般轉置\n";
cout<<"5 快速轉置:\n";
cin>>i;
switch(i)
{
case 1:
system("cls");
cout<<"請創建A矩陣"<<endl;
InitTSM(sm1);
ShowTSM(sm1);
cout<<"請創建B矩陣"<<endl;
InitTSM(sm2);
ShowTSM(sm2);
SeqAdd(sm1,sm2,&sm3);
cout<<"************************************"<<endl;
ShowTSM(sm3);
break;
case 2 :
Seqjian(sm1,sm2,&sm3);
ShowTSM(sm3);
break;
case 3:
multsmatrix(sm1,sm2,&sm3);
ShowTSM(sm3);
break;
case 4:
NormalTSMatrix(sm,tsm);
break;
case 5:
QuickTSM(sm,tsm);
break;
default:
cout<<"choose error!\n";
}
ShowTSM(tsm);
}while(i!=0);

}

void InitTSM(TSMatrix &M) //初始化數組元素
{
int e,m,n,t;
cout<<"請輸入矩陣行數,列數,非零元素的個數:\n";
cin>>m>>n>>t;
M.mu=m;
M.nu=n;
M.tu=t;
for(int i=1;i<=t;i++)
{
cout<<"請輸入元素所在行,列,和值:"<<endl;
cin>>m;
cin>>n;
cin>>e;
if(m<=0||n<=0||m>M.mu||n>M.nu)
{
cout<<"input error!\n";
i--;
}
else
{
M.data[i].i=m;
M.data[i].j=n;
M.data[i].e=e;
}
}
}
void ShowTSM(TSMatrix &M) //顯示數組元素
{
int m,n,t=1;
cout<<"你輸入的矩陣為:\n";
//for(int i=1;i<=M.nu;i++)
//cout<<i<<'\t';
//cout<<endl;
for(m=1;m<=M.mu;m++)
{
for(n=1;n<=M.nu;n++)
{
if(M.data[t].i==m&&M.data[t].j==n)
{
cout<<M.data[t].e<<'\t';
t++;
}
else
cout<<'0'<<'\t';
}
cout<<endl;
}
}
void NormalTSMatrix(TSMatrix &M,TSMatrix &T) //行掃描法
{
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu)
{
int k=1;
for(int i=1;i<M.nu;i++)
for(int t=1;t<=M.tu;t++)
{
if(M.data[t].j==i)
{
T.data[k].i=M.data[t].j;
T.data[k].j=M.data[t].i;
T.data[k++].e=M.data[t].e;

}
}
}
}
void QuickTSM(TSMatrix &M,TSMatrix &T) //快速轉置法
{
int p,col,t,q;
int *num=new int[M.nu];
int *cpot=new int[M.nu];
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu)
{
for(col=1;col<=M.nu;col++)
num[col]=0;
for(p=1;p<=M.tu;p++)
++num[M.data[p].j];
cpot[1]=1;
for(col=2;col<=M.nu;col++)
cpot[col]=cpot[col-1]+num[col-1];
for(t=1;t<=M.tu;t++)
{
//int q=M[data[col].j]++;
col=M.data[t].j;
q=cpot[col];
T.data[q].i=col;
T.data[q].j=M.data[t].i;
T.data[q].e=M.data[t].e;
++cpot[col];
}
}

}

void SeqAdd(TSMatrix &a,TSMatrix &b,TSMatrix *c)
{
int i=1,j=1,k=1; //下標置初始值
while(i<=a.tu||j<=b.tu)
{
if(a.data[i].i==b.data[j].i) //a的行號等於b的行號
{
if(a.data[i].j==b.data[j].j)//a的列號等於b的列號
{
c->data[k].i=a.data[i].i;
c->data[k].j=a.data[i].j;
c->data[k].e=a.data[i].e+b.data[j].e;//此時將他們的數據直接相加
i++;
j++;
k++;
}
else if(a.data[i].j<b.data[j].j)//a的列號小於b的列號
{
c->data[k].i=a.data[i].i;
c->data[k].j=a.data[i].j;
c->data[k].e=a.data[i].e;//如果行號相等,則相加後的值等於列號更小的矩陣中對應元素的值
i++;
k++;
}
else if(a.data[i].j>b.data[j].j)//a的列號大於b的列號
{
c->data[k].i=b.data[j].i;
c->data[k].j=b.data[j].j;
c->data[k].e=b.data[j].e;//如果行號相等,則相加後的值等於列號更小的矩陣中對應元素的值
j++;
k++;
}
}
else if(a.data[i].i<b.data[j].i)//a的行號小於b的行號
{
c->data[k].i=a.data[i].i;
c->data[k].j=a.data[i].j;
c->data[k].e=a.data[i].e;//如果列號相等,則相加後的值等於行號更小的矩陣中對應元素的值
i++;
k++;
}
else if(a.data[i].i>b.data[j].i)//a的行號大於b的行號
{
c->data[k].i=b.data[j].i;
c->data[k].j=b.data[j].j;
c->data[k].e=b.data[j].e;//如果列號相等,則相加後的值等於行號更小的矩陣中對應元素的值
j++;
k++;
}
}
c->nu=a.nu;
c->mu=a.mu;
c->tu=k;
}

void Seqjian(TSMatrix &a,TSMatrix &b,TSMatrix *c)
{
int i=1,j=1,k=1; //下標置初始值
while(i<=a.tu||j<=b.tu)
{
if(a.data[i].i==b.data[j].i) //a的行號等於b的行號
{
if(a.data[i].j==b.data[j].j)//a的列號等於b的列號
{
c->data[k].i=a.data[i].i;
c->data[k].j=a.data[i].j;
c->data[k].e=a.data[i].e-b.data[j].e;//此時將他們的數據直接相加
i++;
j++;
k++;
}
else if(a.data[i].j<b.data[j].j)//a的列號小於b的列號
{
c->data[k].i=a.data[i].i;
c->data[k].j=a.data[i].j;
c->data[k].e=a.data[i].e;//如果行號相等,則相加後的值等於列號更小的矩陣中對應元素的值
i++;
k++;
}
else if(a.data[i].j>b.data[j].j)//a的列號大於b的列號
{
c->data[k].i=b.data[j].i;
c->data[k].j=b.data[j].j;
c->data[k].e=-b.data[j].e;//如果行號相等,則相加後的值等於列號更小的矩陣中對應元素的值
j++;
k++;
}
}
else if(a.data[i].i<b.data[j].i)//a的行號小於b的行號
{
c->data[k].i=a.data[i].i;
c->data[k].j=a.data[i].j;
c->data[k].e=a.data[i].e;//如果列號相等,則相加後的值等於行號更小的矩陣中對應元素的值
i++;
k++;
}
else if(a.data[i].i>b.data[j].i)//a的行號大於b的行號
{
c->data[k].i=b.data[j].i;
c->data[k].j=b.data[j].j;
c->data[k].e=-b.data[j].e;//如果列號相等,則相加後的值等於行號更小的矩陣中對應元素的值
j++;
k++;
}
}
c->nu=a.nu;
c->mu=a.mu;
c->tu=k;
}

void multsmatrix(TSMatrix &M,TSMatrix &N,TSMatrix *T)
{
int i,j,Qn=0;
int *Qe;
if(M.nu!=N.mu)
{cout<<"兩矩陣無法相乘";}
T->mu=M.mu;
T->nu=N.nu;
Qe=(int *)malloc(M.mu*N.nu*sizeof(int)); /* Qe為矩陣Q的臨時數組*/
for(i=1;i<=M.mu*N.nu;i++)
*(Qe+i)=0;/* 矩陣Q的第i行j列的元素值存於*(Qe+(M.data[i].i-1)*N.nu+N.data[j].j)中,初值為0 */
for(i=1;i<=M.tu;i++) /* 結果累加到Qe */
for(j=1;j<=N.tu;j++)
if(M.data[i].j==N.data[j].i)
*(Qe+(M.data[i].i-1)*N.nu+N.data[j].j)+=M.data[i].e*N.data[j].e;
for(i=1;i<=M.mu;i++) /*Qe矩陣中,因為M的每一行和N的每一列相乘都是T的一個元素,不管它是零或非零 */
for(j=1;j<=N.nu;j++) /*當M的第一行和N的第一列相乘則得T的第一個元素;當M的第一行和N的第二列相乘則得T的第二個元素;…… */
if(*(Qe+(i-1)*N.nu+j)!=0) /*……當M的第i行和N的第j列相乘則得T的第p個元素;根據歸納法得p=(i-1)*N的列數+j */
{
Qn++;//非零元個數加一
T->data[Qn].e=*(Qe+(i-1)*N.nu+j);
T->data[Qn].i=i;
T->data[Qn].j=j;
}
T->tu=Qn;

}

⑧ 什麼是sm演算法

國產密碼演算法(國密演算法)是指國家密碼局認定的國產商用密碼演算法,目前主要使用公開的SM2、SM3、SM4三類演算法,分別是非對稱演算法、哈希演算法和對稱演算法。

1.SM2演算法:SM2橢圓曲線公鑰密碼演算法是我國自主設計的公鑰密碼演算法,包括SM2-1橢圓曲線數字簽名演算法,SM2-2橢圓曲線密鑰交換協議,SM2-3橢圓曲線公鑰加密演算法,分別用於實現數字簽名密鑰協商和數據加密等功能。SM2演算法與RSA演算法不同的是,SM2演算法是基於橢圓曲線上點群離散對數難題,相對於RSA演算法,256位的SM2密碼強度已經比2048位的RSA密碼強度要高。橢圓曲線參數並沒有給出推薦的曲線,曲線參數的產生需要利用一定的演算法產生。但在實際使用中,國密局推薦使用素數域256 位橢圓曲線,其曲線方程為y^2= x^3+ax+b(其中p是大於3的一個大素數,n是基點G的階,Gx、Gy 分別是基點G的x與y值,a、b是隨圓曲線方程y^2= x^3+ax+b的系數)。
2.SM3演算法:SM3雜湊演算法是我國自主設計的密碼雜湊演算法,適用於商用密碼應用中的數字簽名和驗證消息認證碼的生成與驗證以及隨機數的生成,可滿足多種密碼應用的安全需求。為了保證雜湊演算法的安全性,其產生的雜湊值的長度不應太短,例如MD5輸出128比特雜湊值,輸出長度太短,影響其安全性SHA-1演算法的輸出長度為160比特,SM3演算法的輸出長度為256比特,因此SM3演算法的安全性要高於MD5演算法和SHA-1演算法。
3.SM4演算法:SM4分組密碼演算法是我國自主設計的分組對稱密碼演算法,用於實現數據的加密/解密運算,以保證數據和信息的機密性。要保證一個對稱密碼演算法的安全性的基本條件是其具備足夠的密鑰長度,SM4演算法與AES演算法具有相同的密鑰長度分組長度128比特,因此在安全性上高於3DES演算法。

⑨ 急急急!!!SM3產生的散列值是多少位

你好,根據網路,「SM3是中華人民共和國政府採用的一種密碼散列函數標准,由國家密碼管理局於2010年12月17日發布。相關標准為「GM/T 0004-2012 《SM3密碼雜湊演算法》」。」同時,根據《SM3密碼雜湊演算法》,SM3產生的散列值是256位。

⑩ sm3演算法在資料庫中怎麼處理

演算法的本質,給數據加一個固定長度的指紋,這個固定長度就是256比特。
填充,使填充後的數據的長度是512的整數倍,先在數據的最尾巴上加一個1;然後把原始數據的長度用64比特表示,放在最後面;再看看現在的數據的長度值離512的整數還差多少個,差多少個就填多少個0在加的這個1和64比特的長度之間。

熱點內容
編程兒歌 發布:2024-10-06 14:03:32 瀏覽:635
所有程序都能反編譯嗎 發布:2024-10-06 13:48:39 瀏覽:604
城際快車源碼 發布:2024-10-06 13:28:10 瀏覽:132
什麼配置主機直播好 發布:2024-10-06 13:22:11 瀏覽:906
office緩存 發布:2024-10-06 13:20:03 瀏覽:540
我的世界國際版比較熱門的伺服器 發布:2024-10-06 13:04:10 瀏覽:534
8g緩存還剩多少怎麼看 發布:2024-10-06 12:59:52 瀏覽:232
物流公司怎麼配置電子面單 發布:2024-10-06 12:54:12 瀏覽:804
魔域歸來手游掛機腳本 發布:2024-10-06 12:42:54 瀏覽:351
福建伺服器雲空間 發布:2024-10-06 12:42:42 瀏覽:100