當前位置:首頁 » 密碼管理 » src加密

src加密

發布時間: 2023-07-14 23:37:45

『壹』 運行php頁面時,給js src路徑解密,並且查看路徑時 js路徑是加密路徑怎麼實現

如果你是想讓人無法獲得這個js腳本,這種加密是無意義的,只要把網頁另存為,js腳本就全部下載下來了,

你應該試試js混淆加密壓縮。把js本身的程序混淆掉讓人無法辨讀。比較好的方式是用php自動混淆js代碼,js源碼也存在伺服器上,但網頁調用的是混淆後的js文件,用一個php來自動生成混淆js源碼文件,這樣就不會造成混淆後自己也不小心遺失源碼。
比如用風吟PHP JS混淆工具還有其他被公布出來的混淆工具

『貳』 des 加密方法cipher.doFianl(src) 返回的byte類型密文是幾進制的是二進制嗎

計算機存儲都是2進制。這里都不涉及進制,2以外的進制只在文本表現時有文字意義。
byte的8bit特性決定了其類似於256進制,但和des輸出沒有直接關系。
產生密文就是位元組數據,是變換後的原輸入,
比如原來1,現在加1變成2。你只拿到2,就不知道原來數是1,
只有數據本身和數據長度。想要解讀就必須要解碼演算法,按進制沒有意義。

『叄』 對稱加密演算法以及使用方法

加密的原因:保證數據安全

加密必備要素:1、明文/密文    2、秘鑰    3、演算法

秘鑰:在密碼學中是一個定長的字元串、需要根據加密演算法確定其長度

加密演算法解密演算法一般互逆、也可能相同

常用的兩種加密方式:

對稱加密:秘鑰:加密解密使用同一個密鑰、數據的機密性雙向保證、加密效率高、適合加密於大數據大文件、加密強度不高(相對於非對稱加密)

非對稱加密:秘鑰:加密解密使用的不同秘鑰、有兩個密鑰、需要使用密鑰生成演算法生成兩個秘鑰、數據的機密性只能單向加密、如果想解決這個問題、雙向都需要各自有一對秘鑰、加密效率低、加密強度高

                    公鑰:可以公開出來的密鑰、公鑰加密私鑰解密

                    私鑰:需要自己妥善保管、不能公開、私鑰加密公鑰解密

安全程度高:多次加密

按位異或運算

凱撒密碼:加密方式    通過將銘文所使用的字母表按照一定的字數平移來進行加密

mod:取余

加密三要素:明文/密文(字母)、秘鑰(3)、演算法(向右平移3/-3)

安全常識:不要使用自己研發的演算法、不要鑽牛角尖、沒必要研究底層實現、了解怎麼應用;低強度的密碼比不進行任何加密更危險;任何密碼都會被破解;密碼只是信息安全的一部分

保證數據的機密性、完整性、認證、不可否認性

計算機操作對象不是文字、而是由0或1排列而成的比特序列、程序存儲在磁碟是二進制的字元串、為比特序列、將現實的東西映射為比特序列的操作稱為編碼、加密又稱之為編碼、解密稱之為解碼、根據ASCII對照表找到對應的數字、轉換成二進制

三種對稱加密演算法:DES\3DES\ AES  

DES:已經被破解、除了用它來解密以前的明文、不再使用

密鑰長度為56bit/8、為7byte、每隔7個bit會設置一個用於錯誤檢查的比特、因此實際上是64bit

分組密碼(以組為單位進行處理):加密時是按照一個單位進行加密(8個位元組/64bit為一組)、每一組結合秘鑰通過加密演算法得到密文、加密後的長度不變

3DES:三重DES為了增加DES的強度、將DES重復三次所得到的一種加密演算法   密鑰長度24byte、分成三份  加密--解密--加密 目的:為了兼容DES、秘鑰1秘鑰2相同==三個秘鑰相同  ---加密一次        密鑰1秘鑰3相同--加密三次    三個密鑰不相同最好、此時解密相當於加密、中間的一次解密是為了有三個密鑰相同的情況

此時的解密操作與加密操作互逆,安全、效率低

數據先解密後加密可以么?可以、解密相當於加密、加密解密說的是演算法

AES:(首選推薦)底層演算法為Rijndael   分組長度為128bit、密鑰長度為128bit到256bit范圍內就可以   但是在AES中、密鑰長度只有128bit\192bit\256bit     在go提供的介面中、只能是16位元組(128bit)、其他語言中秘鑰可以選擇

目前為止最安全的、效率高

底層演算法

分組密碼的模式:

按位異或、對數據進行位運算、先將數據轉換成二進制、按位異或操作符^、相同為真、不同為假、非0為假    按位異或一次為加密操作、按位異或兩次為解密操作:a和b按位異或一次、結果再和b按位異或

ECB : 如果明文有規律、加密後的密文有規律不安全、go里不提供該介面、明文分組分成固定大小的塊、如果最後一個分組不滿足分組長度、則需要補位

CBC:密碼鏈

問題:如何對字元串進行按位異或?解決了ECB的規律可查缺點、但是他不能並行處理、最後一個明文分組也需要填充 、初始化向量長度與分組長度相同

CFB:密文反饋模式

不需要填充最後一個分組、對密文進行加密

OFB:

不需要對最後一組進行填充

CTR計數器:

不需要對最後一組進行填充、不需要初始化向量     

Go中的實現

官方文檔中:

在創建aes或者是des介面時都是調用如下的方法、返回的block為一個介面

func NewCipher(key [] byte ) ( cipher . Block , error )

type Block interface {

    // 返回加密位元組塊的大小

    BlockSize() int

    // 加密src的第一塊數據並寫入dst,src和dst可指向同一內存地址

    Encrypt(dst, src []byte)

    // 解密src的第一塊數據並寫入dst,src和dst可指向同一內存地址

    Decrypt(dst, src []byte)

}

Block介面代表一個使用特定密鑰的底層塊加/解密器。它提供了加密和解密獨立數據塊的能力。

Block的Encrypt/Decrypt也能進行加密、但是只能加密第一組、因為aes的密鑰長度為16、所以進行操作的第一組數據長度也是16

如果分組模式選擇的是cbc

func NewCBCEncrypter(b Block, iv []byte) BlockMode    加密

func NewCBCDecrypter(b Block, iv []byte) BlockMode    解密

加密解密都調用同一個方法CryptBlocks()

並且cbc分組模式都會遇到明文最後一個分組的補充、所以會用到加密位元組的大小

返回一個密碼分組鏈接模式的、底層用b加密的BlockMode介面,初始向量iv的長度必須等於b的塊尺寸。iv自己定義

返回的BlockMode同樣也是一個介面類型

type BlockMode interface {

    // 返回加密位元組塊的大小

    BlockSize() int

    // 加密或解密連續的數據塊,src的尺寸必須是塊大小的整數倍,src和dst可指向同一內存地址

    CryptBlocks(dst, src []byte)

}

BlockMode介面代表一個工作在塊模式(如CBC、ECB等)的加/解密器

返回的BlockMode其實是一個cbc的指針類型中的b和iv

# 加密流程: 

1. 創建一個底層使用des/3des/aes的密碼介面 "crypto/des" func NewCipher(key []byte) (cipher.Block, error) # -- des func NewTripleDESCipher(key []byte) (cipher.Block, error) # -- 3des "crypto/aes" func NewCipher(key []byte) (cipher.Block, error) # == aes 

2. 如果使用的是cbc/ecb分組模式需要對明文分組進行填充

3. 創建一個密碼分組模式的介面對象 - cbc func NewCBCEncrypter(b Block, iv []byte) BlockMode # 加密 - cfb func NewCFBEncrypter(block Block, iv []byte) Stream # 加密 - ofb - ctr

 4. 加密, 得到密文

流程:

填充明文:

先求出最後一組中的位元組數、創建新切片、長度為新切片、值也為切片的長度、然後利用bytes.Reapet將長度換成位元組切片、追加到原明文中

//明文補充

func padPlaintText(plaintText []byte,blockSize int)[]byte{

    //1、求出需要填充的個數

    padNum := blockSize-len(plaintText) % blockSize

    //2、對填充的個數進行操作、與原明文進行合並

    newPadding := []byte{byte(padNum)}

    newPlain := bytes.Repeat(newPadding,padNum)

    plaintText = append(plaintText,newPlain...)

    return plaintText

}

去掉填充數據:

拿去切片中的最後一個位元組、得到尾部填充的位元組個數、截取返回

//解密後的明文曲調補充的地方

func createPlaintText(plaintText []byte,blockSize int)[]byte{

    //1、得到最後一個位元組、並將位元組轉換成數字、去掉明文中此數字大小的位元組

    padNum := int(plaintText[len(plaintText)-1])

    newPadding := plaintText[:len(plaintText)-padNum]

    return newPadding

}

des加密:

1、創建一個底層使用des的密碼介面、參數為秘鑰、返回一個介面

2、對明文進行填充

3、創建一個cbc模式的介面、需要創建iv初始化向量、返回一個blockmode對象

4、加密、調用blockmode中的cryptBlock函數進行加密、參數為目標參數和源參數

//des利用分組模式cbc進行加密

func EncryptoText(plaintText []byte,key []byte)[]byte{

    //1、創建des對象

    cipherBlock,err := des.NewCipher(key)

    if err != nil {

        panic(err)

    }

    //2、對明文進行填充

    newText := padPlaintText(plaintText,cipherBlock.BlockSize())

    //3、選擇分組模式、其中向量的長度必須與分組長度相同

    iv := make([]byte,cipherBlock.BlockSize())

    blockMode := cipher.NewCBCEncrypter(cipherBlock,iv)

    //4、加密

    blockMode.CryptBlocks(newText,newText)

    return newText

}

des解密:

1、創建一個底層使用des的密碼介面、參數為秘鑰、返回一個介面

2、創建一個cbc模式的介面、需要創建iv初始化向量,返回一個blockmode對象

3、加密、調用blockmode中的cryptBlock函數進行解密、參數為目標參數和源參數

4、調用去掉填充數據的方法

//des利用分組模式cbc進行解密

func DecryptoText(cipherText []byte, key []byte)[]byte{

    //1、創建des對象

    cipherBlock,err := des.NewCipher(key)

    if err != nil {

        panic(err)

    }

    //2、創建cbc分組模式介面

    iv := []byte("12345678")

    blockMode := cipher.NewCBCDecrypter(cipherBlock,iv)

    //3、解密

    blockMode.CryptBlocks(cipherText,cipherText)

    //4、將解密後的數據進行去除填充的數據

    newText := clearPlaintText(cipherText,cipherBlock.BlockSize())

    return newText

}

Main函數調用

func main(){

    //需要進行加密的明文

    plaintText := []byte("CBC--密文沒有規律、經常使用的加密方式,最後一個分組需要填充,需要初始化向量" +

        "(一個數組、數組的長度與明文分組相等、數據來源:負責加密的人提供,加解密使用的初始化向量必須相同)")

    //密鑰Key的長度需要與分組長度相同、且加密解密的密鑰相同

    key := []byte("1234abcd")

    //調用加密函數

    cipherText := EncryptoText(plaintText,key)

    newPlaintText := DecryptoText(cipherText,key)

    fmt.Println(string(newPlaintText))

}

AES加密解密相同、所以只需要調用一次方法就可以加密、調用兩次則解密

推薦是用分組模式:cbc、ctr

aes利用分組模式cbc進行加密

//對明文進行補充

func paddingPlaintText(plaintText []byte , blockSize int ) []byte {

    //1、求出分組余數

    padNum := blockSize - len(plaintText) % blockSize

    //2、將余數轉換為位元組切片、然後利用bytes.Repeat得出有該余數的大小的位元組切片

    padByte := bytes.Repeat([]byte{byte(padNum)},padNum)

    //3、將補充的位元組切片添加到原明文中

    plaintText = append(plaintText,padByte...)

    return plaintText

}

//aes加密

func encryptionText(plaintText []byte, key []byte) []byte {

    //1、創建aes對象

    block,err := aes.NewCipher(key)

    if err != nil {

        panic(err)

    }

    //2、明文補充

    newText := paddingPlaintText(plaintText,block.BlockSize())

    //3、創建cbc對象

    iv := []byte("12345678abcdefgh")

    blockMode := cipher.NewCBCEncrypter(block,iv)

    //4、加密

    blockMode.CryptBlocks(newText,newText)

    return newText

}

//解密後的去尾

func clearplaintText(plaintText []byte, blockSize int) []byte {

    //1、得到最後一個位元組、並轉換成整型數據

    padNum := int(plaintText[len(plaintText)-1])

    //2、截取明文位元組中去掉得到的整型數據之前的數據、此處出錯、沒有用len-padNum

    newText := plaintText[:len(plaintText)-padNum]

    return newText

}

//aes解密

func deCryptionText(crypherText []byte, key []byte ) []byte {

    //1、創建aes對象

    block, err := aes.NewCipher(key)

    if err != nil {

        panic(err)

    }

    //2、創建cbc對象

    iv := []byte("12345678abcdefgh")

    blockMode := cipher.NewCBCDecrypter(block,iv)

    //3、解密

    blockMode.CryptBlocks(crypherText,crypherText)

    //4、去尾

    newText := clearplaintText(crypherText,block.BlockSize())

    return newText

}

func main(){

    //需要進行加密的明文

    plaintText := []byte("CBC--密文沒有規律、經常使用的加密方式,最後一個分組需要填充,需要初始化向量")

    //密鑰Key的長度需要與分組長度相同、且加密解密的密鑰相同

    key := []byte("12345678abcdefgh")

    //調用加密函數

    cipherText := encryptionText(plaintText,key)

    //調用解密函數

    newPlaintText := deCryptionText(cipherText,key)

    fmt.Println("解密後",string(newPlaintText))

}

//aes--ctr加密

func encryptionCtrText(plaintText []byte, key []byte) []byte {

    //1、創建aes對象

    block,err := aes.NewCipher(key)

    if err != nil {

        panic(err)

    }

    //2、創建ctr對象,雖然ctr模式不需要iv,但是go中使用ctr時還是需要iv

    iv := []byte("12345678abcdefgh")

    stream := cipher.NewCTR(block,iv)

    stream.XORKeyStream(plaintText,plaintText)

    return plaintText

}

func main() {

//aes--ctr加密解密、調用兩次即為解密、因為加密解密函數相同stream.XORKeyStream

    ctrcipherText := encryptionCtrText(plaintText, key)

    ctrPlaintText := encryptionCtrText(ctrcipherText,key)

    fmt.Println("aes解密後", string(ctrPlaintText))

}

英文單詞:

明文:plaintext     密文:ciphertext   填充:padding/fill    去掉clear  加密Encryption  解密Decryption

『肆』 當內容為英文字母時其在26字母中的其後三個字母代替該字母,若替代字母超過z,從a、b….字母輪回,其它字

#include<stdio.h>

#include<string.h>

#include<stdlib.h>


/*

*加密函數

*src-待加密的字元串

*outbuf-加密後的輸出buffer,未對buffer作size的檢查,調用處需分配足夠空間

*返回-若加密成功返回加密後字元串的長度,失敗返回-1

*/

intencode(constchar*src,char*outbuf,intbufsize)

{

inti=0;

while(*src)

{

if(i>=bufsize-1)//buffer最後需要額外一個byte空間存儲字元串結束符''

{

printf("輸出buffer溢出! ");

return-1;

}


if(*src>='a'&&*src<='z')//如果是小寫字母做以下的轉換

{

outbuf[i++]=(*src-'a'+1)%26+'a';

outbuf[i++]=(*src-'a'+2)%26+'a';

outbuf[i++]=(*src-'a'+3)%26+'a';

}

elseif(*src>='A'&&*src<='Z')//如果是大寫字母做以下的轉換

{

outbuf[i++]=(*src-'A'+1)%26+'A';

outbuf[i++]=(*src-'A'+2)%26+'A';

outbuf[i++]=(*src-'A'+3)%26+'A';

}

else//如果是其他字元原樣輸出

{

outbuf[i++]=*src;

}

src++;

}

//添加字元串結束符''

outbuf[i++]='';


//編碼成功,返回編碼後的字元串長度

returni;

}


intmain(constintargc,constchar*argv[])

{

chartest_str[100]={0};

char*outbuf=NULL;

intbuf_size=0;


printf("請輸入待加密字元串(少於100個字元): ");

scanf("%s",&test_str);


buf_size=strlen(test_str)*sizeof(char)*3+1;//『+1』是額外分配空間給'','*3'保證分配足夠空

//申請足夠的空間存儲加密後的字元串

outbuf=(char*)malloc(buf_size);

if(outbuf==NULL)

{

printf("申請空間失敗! ");

return-1;

}


printf("加密中...");

if(encode(test_str,outbuf,buf_size)<0)

{

printf("加密失敗! ");

free(outbuf);

return-1;

}

else

{

printf("完成. ");

}

printf("加密後字串:%s ",outbuf);


//釋放malloc申請的空間

free(outbuf);


return0;

}

『伍』 用JavaScript加密保護網站頁面


我們經常會遇到一些必須慶絕輸入用戶名和密碼才能進入的網站。其實我們也可以對自己的網站頁面進行簡單的加密改核,具體操作請看下文:
第一步:創建密碼登錄頁
將如下代碼加入HTML的BODY區:
[code]
script LANGUAGE="JavaScript"
!--
flag=0
flag2=0
--
/script
script LANGUAGE="JavaScript" SRC="password.txt" //密碼表文件
/script
script LANGUAGE="JavaScript" SRC="password1.txt" //密碼驗證文件
/script
h1 align="center"Login/h1
script LANGUAGE="JavaScript"
!--
function main()
{
member = document.all.username.value
pass = document.all.password.value
encryption()
password()
}
--
/script
p輸入用戶名: input TYPE="TEXT" ID="username" size="20" br
請輸入密碼: input TYPE="PASSWORD" ID="password" size="20"
input TYPE="BUTTON" ID="button" onclick="main()" value="Enter!" align="center" /p[/code][button value="復制代碼"]
第二步:分別編輯文件1(password.txt)和文件2(password1.txt)核差掘,適合你自己的頁面情況,主要是密碼設定和用戶名設定。
文件1:password.txt
一張密碼表,一看就懂,沒有什麼難度。可以自由設計,注意大小寫的區別。
[code]function encryption()
{
mm = "Z"
k = "j"
b = "p"
mmmm = ""
ccc = "6"
l = "i"
c = "q"
m = "s"
abcd = "m"
o = "n"
u = "z"
e = "d"
gg = "U"
p = "u"
jj = "O"
v = "a"
j = "y"
x = "c"
r = "n"
bb = "D"
cc = "K"
z = "w"
a = "x"
ee = "G"
n = "f"
ff = "T"
i = "g"
w = "r"
ii = "V"
kk = "I"
q = "o"
oooo = ")"
d = "e"
nn = "E"
oo = "P"
pp = "X"
t = "h"
s = "v"
rr = "S"
ss = "L"
tt = "R"
uu = "A"
h = "k"
vv = "C"
ww = "M"
aa = "Y"
xx = "Q"
hh = "B"
yy = "H"
zz = "W"
y = "t"
qq = "J"
aaa = "8"
bbb = "0"
f = "b"
ddd = "9"
eee = " "
fff = "3"
dd = "N"
ggg = "4"
hhh = "1"
iii = "2"
jjj = "7"
kkk = "5"
lll = "."
mmm = ","
nnn = ";"
ooo = ":"
ppp = ""
qqq = ""
rrr = ""
sss = "-"
ttt = "_"
uuu = "="
vvv = "/"
www = "?"
xxx = "`"
yyy = "~"
zzz = "*"
aaaa = "+"
bbbb = "["
cccc = "]"
g = "l"
dddd = "{"
eeee = "}"
ffff = ""
gggg = "|"
hhhh = "!"
iiii = "@"
jjjj = "#"
kkkk = "code:quot;
llll = "%"
nnnn = "("
}[/code][button value="復制代碼"]
文件2:password1.txt
[code]function password()
{
if(member==i+p+d+m+y) //第一個用戶名;對照密碼表翻譯為:guest
{
if(pass==hhh+iii+fff+ggg) //第一個密碼;對照密碼表翻譯為:1234
{
alert("還在外面傻站著干嗎 " + member + "...") //輸入正確後的提示語
window.location.href = x+q+e+d+lll+t+y+abcd //密碼正確後進入的頁面code.htm(對密碼表)
flag2=1
}
}
if(member==k+v+j) //設定第二個用戶名,以下類推...
{
if(pass==f+i+p+d)
{
alert("還在外面傻站著干嗎 " + member + "...")
window.location.href = s+b+v+x+x+lll+t+y+abcd
flag2=1
}
}
if(member==qqq+llll+ttt+llll+rrr) //設定第三個用戶名,以下類推...
{
if(pass==ooo+sss+oooo)
{
alert("還在外面傻站著干嗎 " + member + "...")
window.location.href = s+b+v+x+x+lll+t+y+abcd
flag2=1
}
}
if(member=="")
{
}
else
{
if(flag==3) //設定允許連續輸錯密碼的次數
{
window.location.href = "" //連續3次輸錯後導向該頁面
flag2=1
}
if(flag2==1)
else
{
alert ("對不起,今天我心情不好,在外面待會兒吧!") //輸錯密碼後的警示語
flag=flag+1
}
}
}[/code][button value="復制代碼"]

『陸』 Web前端中關於url、href、src的知識匯總

今天小編要跟大家分享的文章是Web前端中關於url、href、src的知識匯總。熟悉web前端的小夥伴們一定不會對這三個內容陌生。但是對於剛剛接觸web的小夥伴肯定不是很了解,今天小編就敗漏租為大家准備了這篇文章讓我們一起來看一看關於url、href、src的知識匯總。

一、URL的概念


統一資源定位符(或稱統一資源定位器/定位地址、URL地址等,英語:UniformResource
Locator,常縮寫為URL),有時也被俗稱為網頁地址(網址)。如同在網路上的門牌,是網際網路上標準的資源的地址(Address)。


二、URL的格式


2.1標准格式


協議類型:[//伺服器地址[:埠號]][/資源層級UNIX文件路徑]文件名?查詢


2.2完整格式


協議類型:[//[訪問資源需要的憑證信息@]伺服器地址[:埠號]][/資源層級UNIX文件路徑]文件名?查詢


其中【訪問憑證信息@;:埠號;?查詢;#片段ID】都屬於選填項。


三、URL的語法規則


比如網址#/html/index.asp,必須遵守以下的語法規則:


scheme://host.domain:port/path/filename


3.1說明


(1)scheme-定義網際網路服務的類型。最常見的類型是http(2)host-定義域主機(http的默認主機是www)
(3)domain-定義網際網路域名,比如w3school.com.cn(4):port-定義主機上的埠號(http的默認埠號是80)
(5)path-定義伺服器上的路徑(如果省略,則文檔必須位於網站的根目錄中)。(6)filename-定義文檔/資源的名稱


3.2URLSchemes


以下是其中一些最流行的scheme:


Scheme訪問用於...


http超文本傳輸協議以http://開頭的普通網頁。不加密。


https安全超文本傳輸協議安全網頁。加密所有信息交換。


ftp文件傳輸協議用於將文件下載或上傳至網站。


file您計算機上的文件。


四、URL的類型


4.1絕對URL


絕對URL(absoluteURL)顯示文件的完整路徑,這意味著絕對URL本身所在的位置與被引用的實際文件的位置無關。


4.2相對URL


相對URL(relativeURL)以包含URL本身的文件夾的位置為參考點,描述目標文件夾的位置。


一般來說,對於同一伺服器上的文件,應該總是使用相對URL,它們更容易輸入,而且在將頁面從本地系統轉移到伺服器上時更方便,只要每個文件的相對位置保持不變,鏈接就仍然是有效地。


以下為建立路徑所使用的幾個特殊符號,及其所代表的意義。


(1).:代表目前所在的目錄,相對路徑。如:文本或/>


(2)..:代表上一層目錄,相對路徑。如:
文本或/>


(3)../../:代表的是上一層目錄的上一層目錄,相對路徑。如:


(4)/:代表根目錄,絕對路徑。如:[文本](/abc)或


五、href的概念


5.1規范解釋


href(Hypertext
Reference)指定網路資源的位置,從而在當前元素或者當前文檔和由當前屬性定義的需要的錨點或資源之間定義一個鏈接或者關系。


5.2通俗理解


href目的不是為了引用資源,而是為了建立聯系,讓當前標簽能夠鏈接到目標地址。


六、src的概念


source(縮寫),指向外部資源的位置,指向的內容將會應用到文檔中當前標簽所在位置。


七、href和src的區別


7.1請求資源類型不同


(1)href指向網路資源所在位置,建立和當前元素(錨點)或當前文檔(鏈接)之間的聯系。


(2)在請求src資源時會將其指向的資源下載並應用到文檔中,比如JavaScript腳本,img圖片;


7.2作用結果不同


(1)href用於在當前文檔和引用察兆資源之間確立聯系;


(2)src用於替換當前內容;


7.3瀏覽器解析方式不同


(1)若在文檔中添加,瀏覽器會識別該文檔為CSS文件,就會並行下載資源並且不會停止對當前文檔的處理。這也是為什麼建議使用link方式載入
CSS,而不是使用@import方式。


(2)當瀏覽器解析到
,會暫停其他資源的下載和處理,直到將該資源載入、
編譯、執行完畢,圖片和框架等也如此,類似於將所指向資源應用到當前內容。這也是為什麼建議把js
腳本放在底部而不是頭部的原因。


八、link和@import的區別


兩者都是外部引用CSS的方式,但是存在一定的搜州區別:


(1)link是XHTML標簽,除了能夠載入CSS,還可以定義RSS等其他事務;而@import屬於CSS范疇,只可以載入CSS。


(2)link引用CSS時,在頁面載入時同時載入;@import需要頁面完全載入以後再載入。


(3)link是XHTML標簽,無兼容問題;@import則是在CSS2.1提出的,低版本的瀏覽器不支持。


(4)link支持使用Javascript控制DOM改變樣式;而@import不支持。


以上就是小編今天為大家分享的關於Web前端中關於url、href、src的知識匯總的文章,希望本篇文章能夠對正在從事web學習和工作的小夥伴們有所幫助,想要了解更多web相關知識記得關注北大青鳥web培訓官網哦~


作者:WEBING


#/a/1190000013845173


*聲明:內容與圖片均來源於網路(部分內容有修改),版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。

『柒』 c語言字母加密

按照你的要求編寫的字母加密的C語言程序如下

(姓字母向後移兩位,名字母向後移三位)

#include<stdio.h>

#include<string.h>

int main(){

char src[30],result[]="",ch[2]={''};

int i,j,len;

fgets(src,30,stdin);

len=strlen(src);

for(i=0;src[i]!=' ';i++){

if('a'<=src[i] && src[i]<='z'){

ch[0]=(char)(((src[i]-'a')+2)%26+'a');

strcat(result,ch);

}else if('A'<=src[i] && src[i]<='Z'){

ch[0]=(char)(((src[i]-'A')+2)%26+'A');

strcat(result,ch);

}else{

ch[0]=src[i];

strcat(result,ch);

}

}

for(j=i;j<len;j++){

if('a'<=src[j] && src[j]<='z'){

ch[0]=(char)(((src[j]-'a')+3)%26+'a');

strcat(result,ch);

}else if('A'<=src[j] && src[j]<='Z'){

ch[0]=(char)(((src[j]-'A')+3)%26+'A');

strcat(result,ch);

}else{

ch[0]=src[j];

strcat(result,ch);

}

}

printf("%s ",result);

return 0;

}

『捌』 PHP 加密擴展 php-beast 的使用

安裝完 php-beast 後可以使用 tools 目錄下的 encode_files.php 來加密你的項目。使用 encode_files.php 之前先修改 tools 目錄下的 configure.ini 文件,如下:

src_path 是要加密項目的路徑,
dst_path 是保存加密後項目的路徑,
expire 是設置項目可使用的時間 (expire 的格式是:YYYY-mm-dd HH:ii:ss)。
encrypt_type是加密的方式,選擇項有: DES、AES、BASE64 。
修改完 configure.ini 文件後就可以使用命令 php encode_files.php 開始加密項目。
附上例子:將demo項目全部加密到新的demo2

使用 beast_encode_file() 函數加密文件,函數原型如下:
beast_encode_file(string $input_file, string $output_file, int expire_timestamp, int encrypt_type)

例子:
beast_encode_file('index2.php','index3.php','1656518400',BEAST_ENCRYPT_TYPE_AES);

想要更深入了解的話可以看官方文檔
https://github.com/liexusong/php-beast

參考文章:
https://www.jianshu.com/p/7bacac6effe5
https://blog.csdn.net/haileyuxin/article/details/123307604

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:235
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726