導航:首頁 > 文檔加密 > sc2241a是加密的嗎

sc2241a是加密的嗎

發布時間:2023-08-04 11:30:34

① rsa加密演算法的疑惑

什麼是RSA
RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。
RSA是被研究得最廣泛的公鑰演算法,從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何,而且密碼學界多數人士傾向於因子分解不是NPC問題。
RSA的缺點主要有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n 至少也要 600 bits以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。目前,SET(Secure Electronic Transaction)協議中要求CA採用2048比特長的密鑰,其他實體使用1024比特的密鑰。
這種演算法1978年就出現了,它是第一個既能用於數據加密也能用於數字簽名的演算法。它易於理解和操作,也很流行。演算法的名字以發明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。
RSA演算法是一種非對稱密碼演算法,所謂非對稱,就是指該演算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
RSA的演算法涉及三個參數,n、e1、e2。
其中,n是兩個大質數p、q的積,n的二進製表示時所佔用的位數,就是所謂的密鑰長度。
e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n及e1),(n及e2)就是密鑰對。
RSA加解密的演算法完全相同,設A為明文,B為密文,則:A=B^e1 mod n;B=A^e2 mod n;
e1和e2可以互換使用,即:
A=B^e2 mod n;B=A^e1 mod n;
[編輯本段]一、RSA 的安全性
RSA的安全性依賴於大數分解,但是否等同於大數分解一直未能得到理論上的證明,因為沒有證明破解 RSA就一定需要作大數分解。假設存在一種無須分解大數的演算法,那它肯定可以修改成為大數分解演算法。目前, RSA 的一些變種演算法已被證明等價於大數分解。不管怎樣,分解n是最顯然的攻擊方法。現在,人們已能分解多個十進制位的大素數。因此,模數n 必須選大一些,因具體適用情況而定。
[編輯本段]二、RSA的速度
由於進行的都是大數計算,使得RSA最快的情況也比DES慢上倍,無論是軟體還是硬體實現。速度一直是RSA的缺陷。一般來說只用於少量數據加密。
[編輯本段]三、RSA的選擇密文攻擊
RSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝( Blind),讓擁有私鑰的實體簽署。然後,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構:
( XM )^d = X^d *M^d mod n
前面已經提到,這個固有的問題來自於公鑰密碼系統的最有用的特徵--每個人都能使用公鑰。但從演算法上無法解決這一問題,主要措施有兩條:一條是採用好的公鑰協議,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way HashFunction 對文檔作HASH處理,或
[編輯本段]四、RSA的公共模數攻擊
若系統中共有一個模數,只是不同的人擁有不同的e和d,系統將是危險的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質,那末該信息無需私鑰就可得到恢復。設P為信息明文,兩個加密密鑰為e1和e2,公共模數是n,則:
C1 = P^e1 mod n
C2 = P^e2 mod n
密碼分析者知道n、e1、e2、C1和C2,就能得到P。
因為e1和e2互質,故用Euclidean演算法能找到r和s,滿足:
r * e1 + s * e2 = 1
假設r為負數,需再用Euclidean演算法計算C1^(-1),則
( C1^(-1) )^(-r) * C2^s = P mod n
另外,還有其它幾種利用公共模數攻擊的方法。總之,如果知道給定模數的一對e和d,一是有利於攻擊者分解模數,一是有利於攻擊者計算出其它成對的e』和d』,而無需分解模數。解決辦法只有一個,那就是不要共享模數n。
RSA的小指數攻擊。 有一種提高 RSA速度的建議是使公鑰e取較小的值,這樣會使加密變得易於實現,速度有
所提高。但這樣作是不安全的,對付辦法就是e和d都取較大的值。
RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。RSA是被研究得最廣泛的公鑰演算法,從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何,而且密碼學界多數人士傾向於因子分解不是NPC問題。 RSA的缺點主要有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n 至少也要 600 bits 以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。目前,SET( Secure Electronic Transaction )協議中要求CA採用比特長的密鑰,其他實體使用比特的密鑰。
[編輯本段]五、RSA 加密演算法的缺點
)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。
2)安全性, RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價,而且密碼學界多數人士傾向於因子分解不是NPC問題。目前,人們已能分解140多個十進制位的大素數,這就要求使用更長的密鑰,速度更慢;另外,目前人們正在積極尋找攻擊RSA的方法,如選擇密文攻擊,一般攻擊者是將某一信息作一下偽裝(Blind),讓擁有私鑰的實體簽署。然後,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構:
( XM )d = Xd *Md mod n
前面已經提到,這個固有的問題來自於公鑰密碼系統的最有用的特徵--每個人都能使用公鑰。但從演算法上無法解決這一問題,主要措施有兩條:一條是採用好的公鑰協議,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way Hash Function對文檔作HASH處理,或同時使用不同的簽名演算法。除了利用公共模數,人們還嘗試一些利用解密指數或φ(n)等等攻擊.
3)速度太慢,由於RSA 的分組長度太大,為保證安全性,n 至少也要 600 bitx以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。目前,SET(Secure Electronic Transaction)協議中要求CA採用2048比特長的密鑰,其他實體使用1024比特的密鑰。為了速度問題,目前人們廣泛使用單,公鑰密碼結合使用的方法,優缺點互補:單鑰密碼加密速度快,人們用它來加密較長的文件,然後用RSA來給文件密鑰加密,極好的解決了單鑰密碼的密鑰分發問題。
[編輯本段]六、已公開的的攻擊方法
針對RSA最流行的攻擊一般是基於大數因數分解。1999年,RSA-155(512 bits)被成功分解,花了五個月時間(約8000 MIPS 年)和224 CPU hours 在一台有3.2G中央內存的Cray C916計算機上完成 。
2002年,RSA-158也被成功因數分解。
RSA-158表示如下:

② 關於C語言中加密解密的問題!!!!!!!

fseek(fp,0,SEEK_END); //將位置指針移到文件末尾 SEEK_END是宏定義
//表示文件尾
int len=ftell(fp); // ftell()函數可以得到
//文件當前位置相對於文件首的偏移位元組數 .
//在這也就是得到了文件的長度。
pBuf=new char[len+1]; //分配文件長度+1個字元的空間
rewind(fp); //位置指針回到文件首部
fread(pBuf,1,len,fp); //將文件內容讀入到剛才分配的Buffer中
pBuf[len]=0; //buffer的最後一位置為0 即'\0'
//表示字元串的結束
printf("%s\n",pBuf); //列印出buffer內容 即文件內容
fclose(fp); // 關閉文件指針
printf("請輸入加密/解密的密碼:\n");
scanf("%s",key); //終端輸入加密或解密的密碼
sc(pBuf,key,len,strlen(key)); //進行加密/解密 輸入pBuf 加密/解密後文本仍
//放在pBuf中
printf("請輸入保存加密文件的文件名:\n");
scanf("%s",filename); //終端輸入加密/解密後保存的文件名
if((fp=fopen(filename,"wb"))==NULL) //創建該文件
{printf("無法保存文件,請注意磁碟是否已滿!\n");
exit(0); }
else
fwrite(pBuf,1,len,fp); //將加密/解密後文本寫到文件中
fclose(fp); //關閉文件

void sc(char *fp,char *key,int Flen,int Klen)//是一個加密/解密函數
{int i,j,k;
for(i=0;i<Flen;i+=Klen)
for(j=i,k=0;k<Klen;j++,k++)
fp[j]^=key[k];fp[i]='\0';printf("%s\n",fp);}

③ 這是什麼加密方式

7種html加密方式介紹2009-11-26 12:35一:最簡單的加密解密
二:轉義字元""的妙用
三:使用Microsoft出品的腳本編碼器Script Encoder來進行編碼 (自創簡單解碼)
四:任意添加NUL空字元(十六進制00H) (自創)
五:無用內容混亂以及換行空格TAB大法
六:自寫解密函數法
七:錯誤的利用 (自創) 在做網頁時(其實是網頁木馬呵呵),最讓人煩惱的是自己辛辛苦苦寫出來的客戶端IE運行的JAVASCRIPT代碼常常被別人輕易的拷貝,實在讓自己的心裡有點不是滋味,要知道自己寫點東西也挺累的......^*^
但我們也應該清楚地認識到因為JAVASCRIPT代碼是在IE中解釋執行,要想絕對的保密是不可能的,我們要做的就是盡可能的增大拷貝者復制的難度,讓他知難而退(但願~!~),下面我結合自己這幾年來的實踐,及個人研究的心得,和大家一起來探討一下網頁中JAVASCRIPT代碼的加密解密技術。
以加密下面的JAVASCRIPT代碼為例:
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
alert("黑客防線");
</SCRIPT>一:最簡單的加密解密
大家對於JAVASCRIPT函數escape()和unescape()想必是比較了解啦(很多網頁加密在用它們),分別是編碼和解碼字元串,比如例子代碼用escape()函數加密後變為如下格式:
以下是代碼片段:
alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
如何?還看的懂嗎?當然其中的ASCII字元"alert"並沒有被加密,如果願意我們可以寫點JAVASCRIPT代碼重新把它加密如下:
以下是代碼片段:
%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B呵呵!如何?這次是完全都加密了!
當然,這樣加密後的代碼是不能直接運行的,幸好還有eval(codeString)可用,這個函數的作用就是檢查JavaScript代碼並執行,必選項 codeString 參數是包含有效 JavaScript 代碼的字元串值,加上上面的解碼unescape(),加密後的結果如下:
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
var code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");
eval(code)
</SCRIPT>
是不是很簡單?不要高興,解密也就同樣的簡單,解密代碼都擺給別人啦(unescape())!呵呵
二:轉義字元""的妙用
大家可能對轉義字元""不太熟悉,但對於JavaScript提供了一些特殊字元如:n (換行)、 r (回車)、' (單引號 )等應該是有所了解的吧?其實""後面還可以跟八進制或十六進制的數字,如字元"a"則可以表示為:"141"或"x61"(注意是小寫字元"x"),至於雙位元組字元如漢字"黑"則僅能用十六進製表示為"u9ED1"(注意是小寫字元"u"),其中字元"u"表示是雙位元組字元,根據這個原理例子代碼則可以表示為:
八進制轉義字元串如下:
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
eval("")
</SCRIPT>十六進制轉義字元串如下:
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
eval("")
</SCRIPT>這次沒有了解碼函數,因為JavaScript執行時會自行轉換,同樣解碼也是很簡單如下:
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
alert("")
</SCRIPT>
就會彈出對話框告訴你解密後的結果!
三:使用Microsoft出品的腳本編碼器Script Encoder來進行編碼
工具的使用就不多介紹啦!我是直接使用JavaScript調用控制項Scripting.Encoder完成的編碼!代碼如下:
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
var Senc=new ActiveXObject("Scripting.Encoder");
var code='<SCRIPT LANGUAGE="JavaScript">rnalert("黑客防線");rn</SCRIPT>';
var Encode=Senc.EncodeScriptFile(".htm",code,0,"");
alert(Encode);
</SCRIPT>編碼後的結果如下:
以下是代碼片段:
<SCRIPT LANGUAGE="JScript.Encode">#@~^FgAAAA==@#@&ls DD`J黑客防線r#p@#@&FgMAAA==^#~@</SCRIPT>夠難看懂得吧?但相應的解密工具早已出來,而且連解密網頁都有!因為其解密網頁代碼過多,我就不多說拉!給大家介紹一下我獨創的解密代碼,如下:
以下是代碼片段:
<SCRIPT LANGUAGE="JScript.Encode">
function decode()
alert(decode.toString());
</SCRIPT>咋樣?夠簡單吧?它是原理是:編碼後的代碼運行前IE會先對其進行解碼,如果我們先把加密的代碼放入一個自定義函數如上面的decode()中,然後對自定義函數decode調用toString()方法,得到的將是解碼後的代碼!
如果你覺得這樣編碼得到的代碼LANGUAGE屬性是JScript.Encode,很容易讓人識破,那麼還有一個幾乎不為人知的window對象的方法execScript(),其原形為:
window.execScript( sExpression, sLanguage )
參數:
sExpression: 必選項。字元串(String)。要被執行的代碼。
sLanguage: 必選項。字元串(String)。指定執行的代碼的語言。默認值為 Microsoft JScript
使用時,前面的"window"可以省略不寫!
利用它我們可以很好的運行編碼後的JavaScript代碼,如下:
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
execScript("#@~^FgAAAA==@#@&ls DD`J黑客防線r#p@#@&FgMAAA==^#~@","JScript.Encode")
</SCRIPT>
你可以利用方法二對其中的""號內的字元串再進行編碼,使得"JScript.Encode"以及編碼特徵碼"#@~^"不出現,效果會更好!
四:任意添加NUL空字元(十六進制00H)
一次偶然的實驗,使我發現在HTML網頁中任意位置添加任意個數的"空字元",IE照樣會正常顯示其中的內容,並正常執行其中的JavaScript 代碼,而添加的"空字元"我們在用一般的編輯器查看時,會顯示形如空格或黑塊,使得原碼很難看懂,如用記事本查看則"空字元"會變成"空格",利用這個原理加密結果如下:(其中顯示的"空格"代表"空字元")
以下是代碼片段:
<S C RI P T L ANG U A G E =" J a v a S c r i p t ">
a l er t (" 黑 客 防 線") ;
< / SC R I P T>

如何?是不是顯得亂七八糟的?如果不知道方法的人很難想到要去掉裡面的"空字元"(00H)的!
五:無用內容混亂以及換行空格TAB大法
在JAVASCRIPT代碼中我們可以加入大量的無用字元串或數字,以及無用代碼和注釋內容等等,使真正的有用代碼埋沒在其中,並把有用的代碼中能加入換行、空格、TAB的地方加入大量換行、空格、TAB,並可以把正常的字元串用""來進行換行,這樣就會使得代碼難以看懂!如我加密後的形式如下:
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
"xajgxsadffgds";1234567890
625623216;var $=0;alert//@$%%&*()(&(^%^
//cctv function//
(//hhsaasajx xc
/*
asjgdsgu*/
"黑客防線"//ashjgfgf
/*
@#%$^&%$96667r45fggbhytjty
*/
//window
)
;"#@$#%@#432hu";212351436
</SCRIPT>
至少如果我看到這樣的代碼是不會有心思去分析它的,你哪?
六:自寫解密函數法
這個方法和一、二差不多,只不過是自己寫個函數對代碼進行解密,很多VBS病毒使用這種方法對自身進行加密,來防止特徵碼掃描!下面是我寫的一個簡單的加密解密函數,
加密代碼如下(詳細參照文件"加密.htm"):
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
function compile(code)
{
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;i<code.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
}
alert(escape(c));
}
compile('alert("黑客防線");')
</SCRIPT>運行得到加密結果為:o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd
相應的加密後解密的代碼如下:
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
function uncompile(code)
{
code=unescape(code);
var c=String.fromCharCode(code.charCodeAt(0)-code.length);
for(var i=1;i<code.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)-c.charCodeAt(i-1));
}
return c;
}
eval(uncompile("o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd"));
</SCRIPT>
七:錯誤的利用
利用try{}catch(e){}結構對代碼進行測試解密,雖然這個想法很好(呵呵,誇誇自己),因為實用性不大,我僅給個例子
以下是代碼片段:
<SCRIPT LANGUAGE="JavaScript">
var a='alert("黑客防線");';
var c="";
for(var i=0;i<a.length;i++){
c+=String.fromCharCode(a.charCodeAt(i)^61);}
alert(c);//上面的是加密代碼,當然如果真正使用這個方法時,不會把加密寫上的
//現在變數c就是加密後的代碼
//下面的函數t()先假設初始密碼為0,解密執行,
//遇到錯誤則把密碼加1,然後接著解密執行,直到正確運行
以下是代碼片段:
var d=c; //保存加密後的代碼
var b=0; //假定初始密碼為0
t();
function t()catch(e){
c="";
for(var i=0;i<d.length;i++){
c+=String.fromCharCode(d.charCodeAt(i)^b);}
b+=1;
t();
//setTimeout("t()",0);
}
}
</SCRIPT>

閱讀全文

與sc2241a是加密的嗎相關的資料

熱點內容
如何讓軟體在多個安卓系統上運行 瀏覽:573
java判斷半形 瀏覽:880
java判斷正負 瀏覽:320
刷頭條程序員的日常 瀏覽:102
吉林程序員吐槽 瀏覽:243
單片機溫度范圍 瀏覽:419
程序員為什麼素質低 瀏覽:897
可愛的程序員小姐姐 瀏覽:145
伺服器上網站的地址 瀏覽:798
蘋果平板如何找到app資源庫 瀏覽:321
阿里雲可以雲伺服器地址 瀏覽:249
熊貓繪畫app如何導入圖片 瀏覽:555
如何自己編輯手機app 瀏覽:924
程序員那麼可愛帶的項鏈 瀏覽:532
安卓系統導航mic什麼意思 瀏覽:192
編譯sdk如何輸出bin文件 瀏覽:679
如何用html5開發app 瀏覽:143
怎麼隱藏蘋果的app 瀏覽:328
上海捷豹空氣壓縮機 瀏覽:458
51單片機換行 瀏覽:739