找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

HCS301 C语言解码程序

[复制链接]
gz_nick 发表于 2011-12-27 17:03:06 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
近年微芯在官网上已经提供了解码C代码。我测试过比我早前(08年初)从汇编上翻译过来的速度更快。
#define&#160;setbit(&#160;b,&#160;n)&#160;&#160;&#160;((b)&#160;|=&#160;(&#160;1&#160;<<&#160;(n)))
#define&#160;getbit(&#160;b,&#160;n)&#160;&#160;&#160;(((b)&#160;&&#160;((u4t)1<<n))&#160;?&#160;1&#160;:&#160;0)
#define&#160;ifbit(x,y)&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(getbit(x,y))

/*&#160;64bits&#160;decryption&#160;key&#160;*/
u4t&#160;mpik;&#160;/*&#160;high&#160;double&#160;word&#160;*/
u4t&#160;mpin;&#160;/*&#160;low&#160;double&#160;word&#160;*/
/*&#160;
exampe:&#160;
decryption&#160;key:&#160;123456789abcdef0
mpik:&#160;0x12345678
mpin:&#160;0x9abcdef0
*/
u4t&#160;Keeloq_decode(u4t&#160;csr)
{
&#160;&#160;u4t&#160;lut[32]&#160;=
&#160;&#160;{&#160;0,1,1,1,&#160;0,1,0,0,&#160;0,0,1,0,&#160;1,1,1,0,&#160;0,0,1,1,&#160;1,0,1,0,&#160;0,1,0,1,&#160;1,1,0,0&#160;};
&#160;/*&#160;&#160;&#160;E&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;4&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;7&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;C&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;5&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;A&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;3&#160;&#160;&#160;*/
&#160;&#160;u4t&#160;pik,pin,bitin,keybit,keybit2;
&#160;&#160;u2t&#160;bitlu;
&#160;&#160;u2t&#160;ix;
&#160;&#160;//&#160;Load&#160;Key
&#160;&#160;pik&#160;=&#160;mpik;
&#160;&#160;pin&#160;=&#160;mpin;&#160;&#160;
&#160;&#160;for(ix=0;&#160;ix&#160;<&#160;528;&#160;ix++)
&#160;&#160;{
&#160;&#160;&#160;&#160;//&#160;Rotate&#160;Code&#160;Shift&#160;Register

&#160;&#160;&#160;&#160;bitin&#160;=&#160;getbit(csr,31);

&#160;&#160;&#160;&#160;csr<<=1;

&#160;&#160;&#160;&#160;//&#160;Get&#160;Key&#160;Bit

&#160;&#160;&#160;&#160;keybit2=getbit(pin,15);

&#160;&#160;&#160;&#160;//&#160;Rotate&#160;Key&#160;Right

&#160;&#160;&#160;&#160;keybit=getbit(pik,31);
&#160;&#160;&#160;&#160;pik=(pik<<1)|getbit(pin,31);
&#160;&#160;&#160;&#160;pin=(pin<<1)|keybit;&#160;/*&#160;64-bit&#160;left&#160;rotate&#160;*/

&#160;&#160;&#160;&#160;//&#160;Get&#160;result&#160;from&#160;Non-Linear&#160;Lookup&#160;Table

&#160;&#160;&#160;&#160;bitlu&#160;=&#160;0;
&#160;&#160;&#160;&#160;ifbit&#160;(csr,&#160;1)&#160;setbit(bitlu,0);
&#160;&#160;&#160;&#160;ifbit&#160;(csr,&#160;9)&#160;setbit(bitlu,1);
&#160;&#160;&#160;&#160;ifbit&#160;(csr,20)&#160;setbit(bitlu,2);
&#160;&#160;&#160;&#160;ifbit&#160;(csr,26)&#160;setbit(bitlu,3);
&#160;&#160;&#160;&#160;ifbit&#160;(csr,31)&#160;setbit(bitlu,4);

&#160;&#160;&#160;&#160;//&#160;Calculate&#160;Result&#160;of&#160;XOR&#160;and&#160;shift&#160;in&#160;

&#160;&#160;&#160;&#160;csr&#160;=&#160;csr&#160;^&#160;bitin&#160;^&#160;((csr&0x10000L)>>16)&#160;^&#160;lut[bitlu]&#160;^&#160;keybit2;
&#160;&#160;}
&#160;&#160;return&#160;csr;
}
cn380190 发表于 2012-1-5 09:11:14 | 显示全部楼层
先谢啦,非常感谢
cn380190 发表于 2012-1-5 09:13:09 | 显示全部楼层
先谢啦,非常感谢
{:soso_e100:}
cn380190 发表于 2012-1-5 09:15:55 | 显示全部楼层
先谢啦,非常感谢
wkei008 发表于 2016-5-17 11:11:20 | 显示全部楼层
谢谢楼主,这个很强大呀
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-23 07:32 , Processed in 0.055643 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表