⑴ 用LUA做一個MAC地址加一的演算法
可以先轉換為十進制進行加減操作後再轉換回十六進制即可
封裝的兩個函數:
1、string.split用於分割字元串,傳入要分割的字元串和分隔符,返回分割後的table
2、add_mac_address用於計算mac地址增加後的值,傳入要計算的mac地址和步進,返回計算結果
python">(注意:未考慮超過255後進位問題,留著你自己思考吧,O(∩_∩)O~)
具體代碼如下:
functionstring.split(str,delimiter)
ifstr==nilorstr==''ordelimiter==nilthen
returnnil
end
localresult={}
formatchin(str..delimiter):gmatch("(.-)"..delimiter)do
table.insert(result,match)
end
returnresult
end
functionadd_mac_address(mac_addr,step)
ifmac_addr==nilorstring.find(mac_addr,':')==nilor#string.split(mac_addr,':')~=6ortonumber(step)==nilthen
returnnil
end
localmac_addr_tb=string.split(mac_addr,':')
localmac_addr_new_tb={}
fork,vinpairs(mac_addr_tb)do
ifk==6then
dec_num=tonumber('0x'..mac_addr_tb[6])+tonumber(step)
else
dec_num=tonumber('0x'..mac_addr_tb[k])
end
mac_addr_new_tb[k]=string.format("%02x",tostring(dec_num))
end
returntable.concat(mac_addr_new_tb,':')
end
print(add_mac_address('14:9f:e8:5c:06:0d','1'))
⑵ MAC演算法的簡介
簡介
MAC演算法原理(以直聯銀聯pos和POS中心通訊為例)。
a) 將欲發送給POS中心的消息中,從消息類型(MTI)到63域之間的部分構成MAC
ELEMEMENT BLOCK (MAB)。
b) 對MAB,按每8個位元組做異或(不管信息中的字元格式),如果最後不滿8個字
節,則添加「0X00」。
⑶ 急求一個基於aes演算法的cbc-mac 的完整c++程序
之前在項目上用到AES256加密解密演算法,剛開始在java端加密解密都沒有問題,在iOS端加密解密也沒有問題。但是奇怪的是在java端加密後的文件在iOS端無法正確解密打開,然後簡單測試了一下,發現在java端和iOS端採用相同明文,相同密鑰加密後的密文不一樣!上網查了資料後發現iOS中AES加密演算法採用的填充是PKCS7Padding,而java不支持PKCS7Padding,只支持PKCS5Padding。我們知道加密演算法由演算法+模式+填充組成,所以這兩者不同的填充演算法導致相同明文相同密鑰加密後出現密文不一致的情況。那麼我們需要在java中用PKCS7Padding來填充,這樣就可以和iOS端填充演算法一致了。要實現在java端用PKCS7Padding填充,需要用到bouncycastle組件來實現,下面我會提供該包的下載。啰嗦了一大堆,下面是一個簡單的測試,上代碼!001packagecom.encrypt.file;002003004importjava.io.UnsupportedEncodingException;005importjava.security.Key;006importjava.security.Security;007008importjavax.crypto.Cipher;009importjavax.crypto.SecretKey;010importjavax.crypto.spec.SecretKeySpec;{013014/**015*密鑰演算法016*java6支持56位密鑰,bouncycastle支持64位017**/018publicstaticfinalStringKEY_ALGORITHM="AES";019020/**021*加密/解密演算法/工作模式/填充方式022*023*JAVA6支持PKCS5PADDING填充方式024*Bouncycastle支持PKCS7Padding填充方式025**/_ALGORITHM="AES/ECB/PKCS7Padding";027028/**029*030*生成密鑰,java6隻支持56位密鑰,bouncycastle支持64位密鑰031*@returnbyte[]二進制密鑰032**/033publicstaticbyte[]initkey()throwsException{034035////實例化密鑰生成器036//Security.addProvider(neworg.bouncycastle.jce.provider.BouncyCastleProvider());037//KeyGeneratorkg=KeyGenerator.getInstance(KEY_ALGORITHM,"BC");038////初始化密鑰生成器,AES要求密鑰長度為128位、192位、256位039////kg.init(256);040//kg.init(128);041////生成密鑰042//SecretKeysecretKey=kg.generateKey();043////獲取二進制密鑰編碼形式044//returnsecretKey.getEncoded();045//為了便於測試,這里我把key寫死了,如果大家需要自動生成,可用上面注釋掉的代碼046returnnewbyte[]{0x08,0x08,0x04,0x0b,0x02,0x0f,0x0b,0x0c,0470x01,0x03,0x09,0x07,0x0c,0x03,0x07,0x0a,0x04,0x0f,0480x06,0x0f,0x0e,0x09,0x05,0x01,0x0a,0x0a,0x01,0x09,0490x06,0x07,0x09,0x0d};050}051052/**053*轉換密鑰054*@paramkey二進制密鑰055*@returnKey密鑰056**/057publicstaticKeytoKey(byte[]key)throwsException{058//實例化DES密鑰059//生成密鑰060SecretKeysecretKey=newSecretKeySpec(key,KEY_ALGORITHM);061returnsecretKey;062}063064/**065*加密數據066*@paramdata待加密數據067*@paramkey密鑰068*@returnbyte[]加密後的數據069**/070publicstaticbyte[]encrypt(byte[]data,byte[]key)throwsException{071//還原密鑰072Keyk=toKey(key);073/**074*實例化075*使用PKCS7PADDING填充方式,按如下方式實現,就是調用bouncycastle組件實現076*Cipher.getInstance(CIPHER_ALGORITHM,"BC")077*/078Security.addProvider(neworg.bouncycastle.jce.provider.BouncyCastleProvider());079Ciphercipher=Cipher.getInstance(CIPHER_ALGORITHM,"BC");080//初始化,設置為加密模式081cipher.init(Cipher.ENCRYPT_MODE,k);082//執行操作083returncipher.doFinal(data);084}085/**086*解密數據087*@paramdata待解密數據088*@paramkey密鑰089*@returnbyte[]解密後的數據090**/091publicstaticbyte[]decrypt(byte[]data,byte[]key)throwsException{092//歡迎密鑰093Keyk=toKey(key);094/**095*實例化096*使用PKCS7PADDING填充方式,按如下方式實現,就是調用bouncycastle組件實現097*Cipher.getInstance(CIPHER_ALGORITHM,"BC")098*/099Ciphercipher=Cipher.getInstance(CIPHER_ALGORITHM);100//初始化,設置為解密模式101cipher.init(Cipher.DECRYPT_MODE,k);102//執行操作103returncipher.doFinal(data);104}105/**106*@paramargs107*@*@throwsException109*/110publicstaticvoidmain(String[]args){111112Stringstr="AES";113System.out.println("原文:"+str);114115//初始化密鑰116byte[]key;117try{118key=AES256Encryption.initkey();119System.out.print("密鑰:");120for(inti=0;i
⑷ MAC演算法的介紹
MAC演算法 (Message Authentication Codes) 帶秘密密鑰的Hash函數:消息的散列值由只有通信雙方知道的秘密密鑰K來控制。此時Hash值稱作MAC。
⑸ 求銀聯8583報文里mac 的c代碼
uservo user=(uservo)voinfo;
String username=user.getUsername();
String password=user.getPassword();
System.out.println("your username is "+username);
System.out.println("your password is "+password);
List list = new ArrayList();
⑹ MACs是什麼意思,前提是和密碼學相關的
MAC(Message Authentication Code 消息誰碼演算法)
MAC演算法結合了MD5和SHA演算法的優勢, 並加入了密鑰的支持, 是一種更為安全的消息摘要演算法.
1. 環境
jdk1.6
commons-codec-1.4.jar
2. 代碼
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
public class MACCipher {
public static byte[] initHmacMD5Key() throws Exception{
// 初始化KeyGenerator
KeyGenerator kg = KeyGenerator.getInstance("HmacMD5");
//產生密鑰
SecretKey secretKey = kg.generateKey();
//獲得密鑰
return secretKey.getEncoded();
}
public static byte[] encodeHmacMD5(byte[] data, byte[] key)throws Exception{
// 還原密鑰
SecretKey secretKey = new SecretKeySpec(key, "HmacMD5");
// 實例化Mac
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
// 初始化Mac
mac.init(secretKey);
// 執行消息摘要
return mac.doFinal(data);
}
public static String hmacmd5Hex(byte[] data, byte[] key)throws Exception{
return Hex.encodeHexString(encodeHmacMD5(data, key));
}
public static byte[] initHmacSHA512Key()throws Exception{
// 初始化KeyGenerator
KeyGenerator kg = KeyGenerator.getInstance("HmacSHA512");
//產生密鑰
SecretKey secretKey = kg.generateKey();
//獲得密鑰
return secretKey.getEncoded();
}
public static byte[] encodeHmacSHA512(byte[] data, byte[] key)throws Exception{
// 還原密鑰
SecretKey secretKey = new SecretKeySpec(key, "HmacSHA512");
// 實例化Mac
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
// 初始化Mac
mac.init(secretKey);
// 執行消息摘要
return mac.doFinal(data);
}
public static String hmacsha512Hex(byte[] data, byte[] key)throws Exception{
return Hex.encodeHexString(encodeHmacSHA512(data, key));
}
}
3. 測試代碼
String macmd5Data = MACCipher.hmacmd5Hex("HmacMD5編碼".getBytes(), MACCipher.initHmacMD5Key());
System.out.println(macmd5Data);
String macsha512Data = MACCipher.hmacsha512Hex("HmacSHA512編碼".getBytes(), MACCipher.initHmacSHA512Key());
System.out.println(macsha512Data);
⑺ MAC的演算法過程
改進獲取網關MAC地址演算法,在遭受攻擊時仍然可以獲取正確的網關MAC地址;解決Vista系統下可能出現誤報對外攻擊的問題;解決追蹤攻擊者IP時可能出現誤差的問題;解決安裝過程中出現3001錯誤的問題。
ARP防火牆採用內核層攔截技術和主動防禦技術,幾大功能模塊(攔截ARP攻擊/攔截IP沖突/DoS攻擊抑制/安全模式/ARP數據分析/監測ARP緩存/主動防禦/追蹤攻擊源/查殺ARP病毒/系統時間保護/IE首頁保護/ARP緩存保護/自身進程保護/智能防禦)互相配合,可徹底解決ARP相關問題,扼殺DoS攻擊源
⑻ MAC演算法的示例
MAB = M1 M2 M3 M4
其中:
M1 = MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18
M2 = MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28
M3 = MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38
M4 = MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48按如下規則進行異或運算:
MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18
XOR) MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28
---------------------------------------------------
TEMP BLOCK1 = TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18
然後,進行下一步的運算:
TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18
XOR) MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38
---------------------------------------------------
TEMP BLOCK2 = TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28
再進行下一步的運算:
TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28
XOR) MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48
---------------------------------------------------
RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38
c) 將異或運算後的最後8個位元組(RESULT BLOCK)轉換成16 個HEXDECIMAL:
RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38
= TM311 TM312 TM321 TM322 TM331 TM332 TM341 TM342 ||
TM351 TM352 TM361 TM362 TM371 TM372 TM381 TM382
d) 取前8 個位元組用MAK加密:
ENC BLOCK1 = eMAK(TM311 TM312 TM321 TM322 TM331 TM332 TM341 TM342)
= EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18
e) 將加密後的結果與後8 個位元組異或:
EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18
XOR) TM351 TM352 TM361 TM362 TM371 TM372 TM381 TM382
------------------------------------------------------------
TEMP BLOCK= TE11 TE12 TE13 TE14 TE15 TE16 TE17 TE18
f) 用異或的結果TEMP BLOCK 再進行一次單倍長密鑰演算法運算。
ENC BLOCK2 = eMAK(TE11 TE12 TE13 TE14 TE15 TE16 TE17 TE18)
= EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28
g) 將運算後的結果(ENC BLOCK2)轉換成16 個HEXDECIMAL:
ENC BLOCK2 = EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28
= EM211 EM212 EM221 EM222 EM231 EM232 EM241 EM242 ||
EM251 EM252 EM261 EM262 EM271 EM272 EM281 EM282
示例 :
ENC RESULT= %H84, %H56, %HB1, %HCD, %H5A, %H3F, %H84, %H84
轉換成16 個HEXDECIMAL:
「8456B1CD5A3F8484」
h) 取前8個位元組作為MAC值。
取」8456B1CD」為MAC值。
⑼ 請教開發過CPU卡讀寫器的大神,關於MAC演算法的問題
如果是標准PBOC的話:
密鑰:
要算mac的數據:038bb34ab9715b57
初始向量:B6 DC 6F 0B 74 4E E4 EA
計算mac結果: 75 AF F2 A4
以上採用的是3DES演算法。
⑽ 什麼是MAC演算法
一種固定幀長的EPON MAC演算法
Design of MAC of Fixed Frame Size of EPON
王利村 邱昆 王東 王秀妮 陳凱
摘 要:提出了一種固定大小幀結構的EPON MAC協議,採用固定的幀長,提高了乙太網交換機速率.將一幀周期分成三段,光網路單元不僅報告隊列長度信息,而且報告幀到達分布信息,降低了高優先順序業務時延抖動,授權採取高優先順序優先授權的原則,降低了高優先順序業務的接入時延,滿足了對時延和時延抖動敏感語音業務的要求.
關鍵詞:動態帶寬分配;時延;時延抖動;媒質接入控制
分類號:TN915.6 文獻標識碼:A
基金項目:教育部優秀青年教師教學科研獎勵計劃基金資助項目
作者簡介:王利村(1979-),男,碩士生,主要從事光接入網方面的研究.
作者單位:王利村(電子科技大學,寬頻光纖傳輸與通信網技術教育部重點實驗室,成都,610054)
邱昆(電子科技大學,寬頻光纖傳輸與通信網技術教育部重點實驗室,成都,610054)
王東(電子科技大學,寬頻光纖傳輸與通信網技術教育部重點實驗室,成都,610054)
王秀妮(電子科技大學,寬頻光纖傳輸與通信網技術教育部重點實驗室,成都,610054)
陳凱(電子科技大學,寬頻光纖傳輸與通信網技術教育部重點實驗室,成都,610054)
參考文獻:
〔1〕Kramer G, Pesavento G. Ethernet passive optical network (EPON): building a next-generation optical access network[J]. Communications Magazine IEEE, 2002, 40(2): 66-73
〔2〕鍾瑾,張家數.基於固定長度的EPON幀結構和MAC協議設計[J].光通信技術,2003,27(9):36-38
〔3〕曾清海,邱昆.APON上行接入的研究[J].電子科技大學學報,2000,29(4):351-355
〔4〕Angelopoulos J D, Boukis G C, Venieris I S. Delay priorities enhance utilisation of ATM PON access systems[J].Computer Communications, 1997, 11(20): 937-949
〔5〕喬耀軍,管克儉,於曉映,等.基於ATM的無源光網路的煤質接入控制(MAC)協議及其性能分析[J].高技術通訊,2000,10(5):27-31
收稿日期:2004年6月7日
出版日期:2004年12月20日