當前位置:首頁 » 編程語言 » jsrsaphp

jsrsaphp

發布時間: 2022-11-28 18:22:42

php中RSA加密,明文超長,需要分段加密該怎麼做

這方面的話我不是很了解,一般來說,加密分為兩個部分,一個是非對稱加密,一個是對稱加密,使用對稱加密加密正文信息,使用非對稱加密加密對稱加密的密鑰,然後發送加密數據(消息摘要和數字簽名就不討論了),這是正規的數據加密策略,對稱加密默認支持大數據分段加密策略,你只需要從介面中完成加密即可,而且對稱加密速度比非對稱加密快很多,如果你需要使用這個策略建議使用AES。
如果你不願意使用對稱加密,只願意使用AES加密,那你就必須喪失速度了,而且自己處理分段加密,因為RSA加密通常是117個位元組就要分段(這個長度可能和密鑰長度有關,我是用的介面是117),你需要自己把數據變成N個117位元組的數據段來完成加密,解密也需要自己完成位元組拼裝。詳細還是建議你去後盾人平台去看看視頻教學吧,那裡面有的,講的很清楚。

⑵ 如何實現用javascript實現rsa加解密

用javascript實現rsa加解密的實現方式是通過PKCS完成的。
1、整個定義的function

function pkcs1pad2(s,n) {
if(n < s.length + 11) { // TODO: fix for utf-8
alert("Message too long for RSA");
return null;
}
var ba = new Array();
var i = s.length - 1;
while(i >= 0 && n > 0) {
var c = s.charCodeAt(i--);
//UTF-8編碼為變長位元組,使用實際的位元組來記錄
if(c < 128) { // encode using utf-8
ba[--n] = c;
}
else if((c > 127) && (c < 2048)) {
ba[--n] = (c & 63) | 128;
ba[--n] = (c >> 6) | 192;
}
else {
ba[--n] = (c & 63) | 128;
ba[--n] = ((c >> 6) & 63) | 128;
ba[--n] = (c >> 12) | 224;
}
}
//實際輸入拼裝結束,將下一位賦值為0標記結束
ba[--n] = 0;
var rng = new SecureRandom();
var x = new Array();
//拼接隨機非0位元組
while(n > 2) { // random non-zero pad
x[0] = 0;
while(x[0] == 0) rng.nextBytes(x);
ba[--n] = x[0];
}
//這兩位做簡單的校驗
ba[--n] = 2;
ba[--n] = 0;
return new BigInteger(ba);
}
該方法中對UTF-8字元進行了兼容,並且在拼裝完實際輸入的字元後,還拼裝了隨機的位元組,使用拼裝後的字元串去加密。由於每次拼裝的結果是隨機的,這樣每次加密後的密文都不同。
2、調用方法:;
function RSAEncrypt(text) {
var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3);
if(m == null) return null;
var c = this.doPublic(m);
if(c == null) return null;
var h = c.toString(16);
if((h.length & 1) == 0) return h; else return "0" + h;
}

⑶ js和php分別有何優缺點

樓主有一個誤區,php並不是說可以做前台x0dx0aphp永遠都是伺服器端腳本x0dx0a他的作用只是提供邏輯功能並且能根據需要將邏輯處理後生成html源發送給瀏覽器進行展示!x0dx0a瀏覽器是能解析一些標記性語言(html),以及一些客戶端腳本(javascript)x0dx0a說白了,js和php本身就是在兩個不同的地方運行的,壓根就沒有可比性!x0dx0a展示圖片、視頻,以及一些網頁特效,這是php辦不到的,也不該是php該乾的活x0dx0a而數據的統計、分析、處理,這是js辦不到的,也不該是js乾的活!x0dx0a他們差不多可以理解為2種領域、2種作用!x0dx0a這怎麼能有可比性呢

⑷ 非vue項目在js里使用jsencrypt

java,thinkPHP等都可以使用jsencrypt.js。
使用jsencrypt.js的目的是實現對數據進行加密傳輸,因為JSEncrypt屬於RSA加密,RSA加密演算法是一種非對稱加密演算法,RSA加密使用了"一對"密鑰.分別是公鑰和私鑰,使用公鑰加密的數據,利用私鑰進行解密,使用私鑰加密的數據,利用公鑰進行解密。
在前端項目中使用jsencrypt進行欄位加密的使用步驟(以PHP為例):獲取公鑰;實例化對象;設置公鑰;將所需數據進行加密然後返回。

⑸ 如何在js中調用php

在js中調用php的方法是直接在script標簽的src屬性中嵌入要訪問的php地址。

1、JS方式調用PHP文件並取得PHP中的值
舉例說明:
如在頁面test_json1中用下面這句調用:

<script type="text/javascript" src="/index.php/test/testjson2">  

</script>  

<script type="text/javascript" >  

    alert(jstext);  

</script> 

2、在test_json2.php中有這樣一段PHP代碼:

<?php  

$php_test='I come from PHP!';  

echo "var test='$php_test';";  

echo "var jstext="."'$php_test';";   

?>   

當執行test_json1.php文件時,就會調用test_json2.php文件,並將b.php文件的輸出作為JS語句來執行,

所以此處會彈出一個提示框,內容為JS變數jstext的值,也就是在PHP文件中賦給jstext的值。
這樣就行你看過後很簡單吧以後不會可以向我一樣經常到後盾人找找相關教材看看就會了,希望能幫到你,給個採納吧謝謝

⑹ JavaScript和PHP有什麼區別呢後台交互用哪個處理好呢為什麼謝謝了

二級級聯菜單,不用AJAX和SQL無解,其實AJAX也不難,大概看看就懂了,可以再省級select里的option加上onclick事件,傳一個參數給他,然後非同步通信new一個XMLHTTPREQUEST對象給server讓server返回市級select就行了。看起來挺麻煩,其實你去學學很簡單的。SQL也很簡單,從資料庫直接select city from table_city(你的省和市的表,剛開始放一起就行,不用做外鍵表什麼的,沒必要) where province = 你非同步提交上來的省名字或是ID

當然,你要是寫死了只用PHP和JavaScript也能實現,不過那就失去級聯意義了。就是在初始化的時候要把所有的省、市信息都down下來,數據量太龐大了。具體實現是:可以把數據放到一個大的json中,然後onclick響應省事件,通過穿的值到json中找市的數據,然後返回一個select,中間帶著市的信息就行。十分不建議你這么做,屬於歪門邪道。。。

想在這方面發展就要一步一個腳印的走,別認為不會的就不去學,應該看到不會的立馬去學,這樣才能進步。

當你學會了AJAX和SQL以後再做一個二級級聯的東西就覺得很簡單了。

⑺ php 怎麼生成rsa加密的公鑰和私鑰

附上出處鏈接:http://bbs.csdn.net/topics/370014844

四,用PHP生成密鑰

PEAR::Crypt_RSA的Crypt_RSA_KeyPair類可以生成密鑰。調用步驟如下:

require_once('Crypt/RSA.php');
$math_obj = &Crypt_RSA_MathLoader::loadWrapper();
$key_pair = new Crypt_RSA_KeyPair($key_lenth);
if (!$key_pair->isError()){
$public_key = $key_pair->getPublicKey();
$private_key = $key_pair->getPrivateKey();
$e =$math_obj->hexstr($math_obj->bin2int($public_key->getExponent()));
$d =$math_obj->hexstr($math_obj->bin2int($private_key->getExponent()));
$n =$math_obj->hexstr($math_obj->bin2int($public_key->getMolus()));
}

hexstr()是自己添加的函數,用來把十進制字元串轉換為十六進制。對Crypt_RSA_Math_GMP很簡單,只需:

function hexstr($num){
return gmp_strval($num,16);
}

對Crypt_RSA_Math_BCMath略麻煩些:

function hexstr($num){
$result = '';
do{
$result = sprintf('%02x',intval(bcmod($num,256))).$result;
$num = bcdiv($num, 256);
}while(bccomp($num, 0));
return ltrim($result,'0');
}

五,用php生成密鑰(二)

為了提高加密速度,一般選一個較小的e。比較常用的是3、17、257、65537幾個素數。

generate()生成密鑰的演算法是依次計算p,q,n,e,d。因此做了如下改動,以便可以自己選e值:

原來的:
function Crypt_RSA_KeyPair($key_len, $wrapper_name = 'default', $error_handler = '')
改後增加一個參數e:
function Crypt_RSA_KeyPair($key_len, $e = null, $wrapper_name = 'default', $error_handler = '')
這個函數調用generate()。效應地:
function generate($key_len = null)
也增加一個參數e:
function generate($key_len = null, $e = null)

把CRYPT_RSA-1.0.0的KeyPair.php中屬於generate()的245~271行改動順序,由e確定p和q:

if($e != null&&$this->_math_obj->cmpAbs($e,2)>0)
$e = $this->_math_obj->nextPrime($this->_math_obj->dec($e));//取個素數
else
{
while(true)
{
$e = $this->_math_obj->getRand($q_len, $this->_random_generator);
if ($this->_math_obj->cmpAbs($e,2)<=0)
continue;
$e = $this->_math_obj->nextPrime($this->_math_obj->dec($e));
break;
}
}
do{
$p = $this->_math_obj->getRand($p_len, $this->_random_generator, true);
$p = $this->_math_obj->nextPrime($p);
do{
do{
$q = $this->_math_obj->getRand($q_len, $this->_random_generator, true);
$tmp_len = $this->_math_obj->bitLen($this->_math_obj->mul($p, $q));
if ($tmp_len < $key_len)
$q_len++;
elseif ($tmp_len > $key_len)
$q_len--;
} while ($tmp_len != $key_len);
$q = $this->_math_obj->nextPrime($q);
$tmp = $this->_math_obj->mul($p, $q);
} while ($this->_math_obj->bitLen($tmp) != $key_len);
// $n - is shared molus
$n = $this->_math_obj->mul($p, $q);
// generate public ($e) and private ($d) keys
$pq = $this->_math_obj->mul($this->_math_obj->dec($p), $this->_math_obj->dec($q));
if($this->_math_obj->isZero($this->_math_obj->dec($this->_math_obj->gcd($e, $pq))))
break;
}while(true);

(網易的服務真體貼啊,連pre標記裡面的東西都給改。還改不好)這樣,如果要生成e為3的1024位密鑰,可以如下調用:

$key_pair = new Crypt_RSA_KeyPair(1024,3);

六,干什麼用

加密比較重要的數據。比如注冊時用戶輸入的密碼。
登錄時把密碼hmac一下就可以防止重放攻擊(replay attack)了。對注冊不存在這種攻擊,但有密碼泄露的危險。上傳密碼hash那點安全性根本不算什麼。這個可以用RSA加密解決。
不過,對中間人攻擊還是沒辦法。

另外一個

http://www.mingup.cn/php/2011/0121/101568.html

⑻ Js和Php的區別是什麼

1、兩者的核心功能不一樣:

php中的核心功能是用函數方式實現,例如取得一個字元串的長度:$length = strlen(str);

而js是用對象的方法實現,例如取得一個字元串的長度:var length = str.length。

2、變數傳值方式不一樣:

js中,變數的傳值傳遞和傳址傳遞是根據傳遞的對象的類型決定的,不能自己隨心控制;

而php中所有類型都可以自由控制其傳值是傳值還是傳址,在變數前加上&就可以變成傳址方式,不加&就是傳值方式。

3、兩者基本特點不一樣:

php是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。

js是一種屬於網路的腳本語言,已經被廣泛用於Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。

⑼ 如何在js中調用php

在js中調用php的方法是直接在script標簽的src屬性中嵌入要訪問的php地址。

1、JS方式調用PHP文件並取得PHP中的值
舉例說明:
如在頁面test_json1中用下面這句調用:

<scripttype="text/javascript"src="/index.php/test/testjson2">

</script>

<scripttype="text/javascript">

alert(jstext);

</script>

2、在test_json2.php中有這樣一段PHP代碼:

<?php

$php_test='IcomefromPHP!';

echo"vartest='$php_test';";

echo"varjstext="."'$php_test';";

?>

當執行test_json1.php文件時,就會調用test_json2.php文件,並將b.php文件的輸出作為JS語句來執行,

所以此處會彈出一個提示框,內容為JS變數jstext的值,也就是在PHP文件中賦給jstext的值。

3、調用結果:

熱點內容
帝來哪個配置值得購買 發布:2025-05-16 21:12:29 瀏覽:461
什麼是nodejs前端伺服器 發布:2025-05-16 21:12:17 瀏覽:404
編譯選項立即綁定未定義符號 發布:2025-05-16 20:55:13 瀏覽:905
linuxmysql慢日誌 發布:2025-05-16 20:47:58 瀏覽:270
村兩委有哪些配置 發布:2025-05-16 20:34:47 瀏覽:292
我的世界有什麼伺服器好玩的 發布:2025-05-16 20:28:57 瀏覽:482
c語言按位與運算 發布:2025-05-16 20:24:10 瀏覽:754
蘋果手機如何修改密碼安全 發布:2025-05-16 20:23:34 瀏覽:193
圖片文字識別演算法 發布:2025-05-16 20:21:54 瀏覽:46
校園ftp伺服器 發布:2025-05-16 20:19:38 瀏覽:72