Ⅰ 什麼是滾碼原理是什麼
滾動碼當前主要用在RKE(Remote Keyless Entry)系統中,進行身份驗證,它的原理如下:編碼器檢測到按鍵輸入, 把系統從省電狀態中喚醒, 同步記數加1 , 與序列號一起經密匙加密後形成密文數據, 並同鍵值等數據發送出去。首先檢測編碼器需要是否與接收器的序號相對應,如果對應,就檢測同步計數是否在同步窗口內,也就是說是否大於本機的保存同步計數但是又不大得太多,如果大得太多,本機就再作一次同步。
Flash平滑滾動原理及實例解析
如何使用:
電影剪輯scrollMC的onLoad事件:
showHeight = 350;
myHeight = 350;
speed = 13;
targetMovie = "show.testMC";
showHeight用來指定綁定的MC的顯示高度,myHeight指定滾動條本身的高度。 speed是滑動的速度,其值越大,滑動越慢。targetMovie指定綁定的MC的路徑(相對)。
技術內幕:
主要的ActionScript集中在一個空的電影剪輯中:
onClipEvent (enterFrame) {
mcMoved();
}
onClipEvent (load) {
a = eval("_parent._parent."+_parent.targetMovie);
function mcMoved() {
whereY = -(a._height-_parent.showHeight)*(_parent.dragMC._y/(_parent.myHeight-38));
var tempK = whereY-a._y;
if (Math.abs(tempK)>1) {
a._y += tempK/_parent.speed;
nowY = _parent.dragMC._y;
}
}
}
a = eval("_parent._parent."+_parent.targetMovie); 用來將指定綁定的MC位置。以後就可以使用a._x、a._alpha來訪問這個電影剪輯了,與此相類似的技術還有_parent["myMC"]。
whereY = -(a._height-_parent.showHeight)*(_parent.dragMC._y/(_parent.myHeight-38));主要用來計算綁定的MC應該滾動到的位置。
function goArea(a) {
dragMC._y = (showHeight-38)*a;
}
這個比較重要,直接關繫到對CPU的佔用率。首先,if (Math.abs(tempK)>1)判斷當前要滾動到的位置是否離當前位置有一個像素的差值。Math.abs()是計算絕對值的函數。如果不是,即已經滾動到了應該到達的位置,則不進行幀的重繪。(Flash繪制一個幀的圖像要耗相當的CPU,事實上,CPU的大部份使用都花在顯示上面。AS的執行只要很少的CPU,所以,進行必要的判斷,去掉不必要的重新繪制。可以有效地降低CPU的使用率。至少在滑鼠沒有重新進行交互時可以很好地降低CPU的使用率)。如果其值大於1,則將綁定的MC位置重新計算。
a._y += tempK/_parent.speed;是一個很經常用的滑動公式,其實真正的公式是這樣的:a._y += (whereY-a._y)/_parent.speed 這里只是在上一步進行了簡化。
function goArea(a) {
dragMC._y = (showHeight-38)*a;
}
函數對應三個按鈕「滾動到1/3、滾動到1/2、滾動到2/3、」其原理想想應該不難明白。
Ⅱ 滾動碼的原理
編碼器檢測到按鍵輸入, 把系統從省電狀態中喚醒, 同步記數加1 , 與序列號一起經密匙加密後形成密文數據, 並同鍵值等數據發送出去。由於同步計數值每次發送都不同, 即使是同一按鍵多次按下也不例外。同步計數自動向前滾動, 發送的碼字不會再發生。因此被稱為滾動碼。同步計數跟編碼器序號一個64位一起經過DES加密,DES密鑰為廠家獨有,必須保密。加密之後的密文則通過射頻系統發射出去。
接收端接收到密文之後,通過廠家的DES密鑰進行解密,解密之後得到同步計數和編碼器序號。首先檢測編碼器序號是否與接收器的序號相對應,如果對應,就檢測同步計數是否在同步窗口內,也就是說是否大於本機保存的同步計數,但是又不大得太多,如果大得太多,本機就再作一次同步。如果在同步窗口中,通知執行機構執行用戶命令,比如說打開門鎖或者關閉門鎖之類的。
由於加密演算法能夠把明文打散,因此,碼的滾動會使得發射的碼變化差異很大而難以破解,由於同步計數的存在,重復發送也沒有效果,因此要攻破該類系統就要攻破DES演算法。同步計數為16 位, 可達2的16次方 =65536 , 若每天用10 次, 則有18年的使用周期。32位的序列號, 容量為232 = 42 億, 可以完全滿足生產要求。