首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TEA中的sum常数是如何计算的

TEA(Tiny Encryption Algorithm,小加密算法)是一种对称密钥加密算法,主要用于简单的数据加密。TEA算法中的sum常数是一个固定的值,用于在加密和解密过程中增加混淆和扩散。

TEA算法中的sum常数是通过以下公式计算的:

代码语言:javascript
复制
sum = 0xC6EF3720

这个值是一个固定的常数,用于在加密和解密过程中的循环中作为累加器。在每次循环中,sum会与密钥的一部分进行异或操作,并与明文或密文进行一系列的加法和移位操作。

TEA算法的核心部分如下:

代码语言:javascript
复制
void tea_encrypt(uint32_t *v, uint32_t *k) {
    uint32_t v0 = v[0], v1 = v[1], sum = 0, i;
    uint32_t delta = 0x9E3779B9;
    uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];

    for (i = 0; i < 32; i++) {
        sum += delta;
        v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
        v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
    }

    v[0] = v0;
    v[1] = v1;
}

void tea_decrypt(uint32_t *v, uint32_t *k) {
    uint32_t v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i;
    uint32_t delta = 0x9E3779B9;
    uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];

    for (i = 0; i < 32; i++) {
        v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
        v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
        sum -= delta;
    }

    v[0] = v0;
    v[1] = v1;
}

在这个算法中,sum常数的初始值为0xC6EF3720,这个值是根据TEA算法的设计者选择的,以确保加密和解密过程的安全性和正确性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

梯度如何计算

引言 深度学习模型训练本质上一个优化问题,而常采用优化算法梯度下降法(SGD)。对于SGD算法,最重要就是如何计算梯度。...如果你学过微积分,我相信你一定知道如何计算梯度,或者说计算导数。对于深度网络来说,其可以看成多层非线性函数堆积,即: ?...如果大家细致观察的话,可以看到要求出最终导数,你需要计算出中间结果:p与q。计算中间结果过程一般前向(forward)过程,然后再反向(backward)计算出最终导数。...比如你要计算dW,你知道要用dD与X两个矩阵相乘就可以得到。Wshape[5,10],而dDshape[5,3],Xshape[10,3]。...,就是如何计算梯度。

2.5K70
  • 计算如何启动

    主要作用是,告诉计算机到硬盘哪一个位置去找操作系统。 主引导记录由三个部分组成: ? 其中,第二部分"分区表"作用,将硬盘分成若干个区。 2.2 分区表 硬盘分区有很多好处。...三、第三阶段:硬盘启动 这时,计算控制权就要转交给硬盘某个分区了,这里又分成三种情况。 3.1 情况A:卷引导记录 上一节提到,四个主分区里面,只有一个激活。...计算机会读取激活分区第一个扇区,叫做"卷引导记录"(Volume boot record,缩写为VBR)。 "卷引导记录"主要作用是,告诉计算机,操作系统在这个分区里位置。...Linux环境,目前最流行启动管理器Grub。 ? 四、第四阶段:操作系统 控制权转交给操作系统后,操作系统内核首先被载入内存。 以Linux系统为例,先载入/boot目录下面的kernel。...不过对于这种不是自己文章也标原创的人我特别、非常反感,写过文章都知道写一篇文章需要花很多时间,申请转载就已经很不错了,还把文章搞成自己写,而且观察了下他公众号,好多文章都是截图别人文章以图片形式发

    91020

    计算如何启动

    从打开电源到开始操作,计算启动一个非常复杂过程。 我一直搞不清楚,这个过程到底怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整理笔记。...最早时候,工程师们用它来比喻,计算机启动一个很矛盾过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!...如果这512个字节最后两个字节0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给"启动顺序"下一个设备。...如果想使用更大硬盘,只有2个方法:一提高每个扇区字节数,二增加扇区总数。 三、第三阶段:硬盘启动 这时,计算控制权就要转交给硬盘某个分区了,这里又分成三种情况。...Linux环境,目前最流行启动管理器Grub。 四、第四阶段:操作系统 控制权转交给操作系统后,操作系统内核首先被载入内存。 以Linux系统为例,先载入/boot目录下面的kernel。

    97850

    计算如何工作

    计算机最早运用于军事 埃尼阿克-第一台计算机,194x ,冯诺依曼大佬参与研发,用来计算导弹轨迹 后来冯大佬带队,开发“通用计算机”。...寄存器空间太小,往往只是几 kb ,因此 CPU 在计算时候就需要反复地从内存加载数据,效率比较有影响(内存读速度相对寄存器来说就是弟弟,拖后腿了)。...位机器指令可以有 64 位) RAM 随机存取存储器(Random Access Memory),也叫内存 CPU 寄存器很少,所以每个都有专门名字(表虚构) 8 bit 指令分为两部分...A 指令:把后面四位 1110(换成十进制 14)操作数这个地址数据,读取到寄存器 A 执行指令 把 14 地址内存数据读取出来,放到寄存器 A 第一条语句执行完毕,程序计数器值自动被系统...比如:发现某几个逻辑控制掉血,也是就可以写另一个程序,动态修改掉游戏程序对应内存空间里指令,变成中弹不掉血 现在写外挂主要难度不在于分析指令,而是在于如何绕过游戏公司“反外挂机制”(腾讯TP)

    9410

    双金属中心化合物磁交换耦合常数计算

    由上式可知,要计算磁交换耦合常数,需要计算体系高自旋态和对称破缺态。 本文介绍如何用ORCA来计算耦合常数。...在ORCA,可以在一次任务完成两个计算,并且程序会自动给出耦合常数数值;而使用Gaussian时,则需要手动计算两个态。...(II)配合物为例,展示如何用ORCA计算磁交换耦合常数,所用版本为ORCA 5.0.3。...需要说明,ORCA这个功能只对波函数优化一次,并不保证能得到稳定波函数,而Gaussianstable=opt则会反复优化波函数直至稳定。...需要注意,由于ORCA 5.0版本开始,在SCF计算默认开启RIJCOSX,且B3LYP泛函在Gaussian和ORCA实现不完全相同,因此结果会有微小差别。

    1.9K10

    2021-2-17:Java HashMap key 哈希值如何计算,为何这么计算

    首先,我们知道 HashMap 底层实现是开放地址法 + 链地址法方式来实现。 ? 即数组 + 链表实现方式,通过计算哈希值,找到数组对应位置,如果已存在元素,就加到这个位置链表上。...这个数组大小一定是 2 n 次方,因为找到数组对应位置需要通过取余计算,取余计算是一个很耗费性能计算,而对 2 n 次方取余就是对 2 n 次方减一取与运算。...所以保持数组大小为 2 n 次方,这样就可以保证计算位置高效。 那么这个哈希值究竟是怎么计算呢?假设就是用 Key 哈希值直接计算。...其实 key1 和 key2 高位不一样。...由于数组从小到达扩容,为了优化高位被忽略这个问题,HashMap 源码对于计算哈希值做了优化,采用高位16位组成数字与源哈希值取异或而生成哈希值作为用来计算 HashMap 数组位置哈希值

    1.2K20

    计算属性如何被Vue实现

    写在前边 无论面试过程还是日常业务开发,相信大多数前端开发者对于 Vue 应用已经熟能生巧了。 今天我们就来聊聊 Vue Computed 如何被实现。...文章会告别枯燥源码,从用法到原理层层拨丝与你一起来看看在 Vue Computed 如何被实现。 前置知识 首先,文章源码思路基于最新稳定 Vue@3.2.37 版本进行解读。...上述属性就是一个 Computed 我们需要关心属性,大概了解了各个属性代表含义接下来就让我们一起来看看 computed 如何被 Vue 实现。...Effect 我已经在前置文章 Vue3响应式如何被JavaScript实现 中介绍过它实现,有兴趣深入了解同学可以移步查阅。 同理,当我们首次访问该计算属性时。...我们围绕上述功能来分析源代码如何实现: 首先在 getter 我们遗失逻辑: // #3376 在 Vue 3.0.7 前在 readonly() 包装 computed() 会破坏计算功能

    82130

    计算如何存储数据

    那么我们怎样将其转化为二进制存储到计算,这个过程我们称之为编码。更广义地讲,就是把信息从一种形式转化为另一种形式过程。...扩展ASCII码 在美国,这 128 够了,但是其他国家不答应啊,他们字符和英文有出入,比如在法语在字母上有注音符号,如 é,这个怎么表示成二进制?...但是不管怎样,所有这些编码方式,0--127 表示符号一样,不一样只是 128--255 这一段。不同国家有不同字符集,所以它并不是国际标准。...下面,还是以汉字“严”为例,演示如何实现 UTF-8 编码。...总结 搞清楚了 ASCII、Unicode 和 UTF-8 关系,我们就可以总结一下现在计算机系统通用字符编码工作方式: 在计算机内存,统一使用 Unicode 编码,当需要保存到硬盘或者需要传输时候

    2.4K41

    浮点数在计算如何表示

    计算,一般用IEEE浮点近似表示任意一个实数,那么它实际上又是如何表示呢? 下面的表达式里,i值是多少,为什么?如果你不确定答案,那么你应该好好看看本文。...它得到值为 +∞(s=0)或-∞(s=1),它在计算可以表示溢出结果,例如两个非常大数相乘。 阶码全为1,小数域不全为0。它得到值为NaN(Note a Number)。...它在计算可以表示非法数,例如计算根号-1时值。...那么浮点数数值范围和有效位如何得到呢? 浮点数数值范围计算 有了前面了基础,我们就可以来计算浮点数数值范围了。...浮点数在内存存储 了解了这么多,我们来看一下一个小数究竟是如何在内存存储。以float f = 8.5f为例。其二进制表示为 ?

    1.9K10

    Linux系统平均负载如何计算

    大家好,又见面了,我你们朋友全栈君。 关于负载计算,它结果包含有小数一个浮点数,内核不能使用float变量,那么这里就采用了一个整型变量低11位来表示小数部分。...,后面就开始真正主题,对于平均负载,它是如何计算呢?...这样计算有一个缺点,就是我们获取到负载值实际上并不能反应当下系统负载情况,因为它计算了从系统启动开始以来平均值,无法反应当下系统运行情况,因此系统实际并不是这样计算,会求最近1min,5min...和15min之内平均值,那么计算方法怎样呢?...,反复如此计算下去,那么很久远采样数据就在当前计算结果无限趋近于0了。

    2.3K20

    程序在计算如何运行起来(一)

    来讲讲程序在计算如何运行起来计算机系统概述计算机系统组成硬件与软件关系操作系统基本功能程序编写程序设计语言概述从高级语言到机器码转化编译器与解释器作用程序存储与加载存储器层次结构程序存储方式可执行文件格式程序加载器作用程序执行...Docker使用虚拟化对程序运行影响未来趋势与发展云计算与边缘计算人工智能与自动化程序生成新型计算架构(量子计算、生物计算)编程语言与开发工具发展趋势计算机系统概述计算机系统一个由硬件和软件组成复杂体系...为了理解程序如何运行,首先需要了解计算机系统基本组成、硬件与软件之间关系,以及操作系统在其中扮演关键角色。...编码规范:编码规范关于如何编写代码标准和指南,通常包括命名规则、注释风格、代码格式等。良好编码规范能够提高代码可读性,使不同开发者之间协作更加顺畅。...在计算机系统,程序存储与加载一个非常关键环节,它不仅决定了程序如何被存储在不同层次存储器,还涉及到程序从存储设备被加载到内存以供CPU执行整个过程。

    1.6K31

    计算如何实现加法

    二、一位二进制加法 先来看一下只有一位二进制数加法如何实现。一位加法结果,如下表所示: 0 1 0 00 01 1 01 11 我们把结果分为个位和十位两个部分来看一下。...所以要实现多位加法需要先实现进位相加。 先来看一下带进位加和输出如何得到,处理方式和我们平时计算是一样:: 现在有输入A,B和进位输入C0 对输入A和B计算得到加和输出S1和近位输出C1。...和我们小学时学计算一毛一样 再来看一下进位输出如何计算: 我们知道,对于A、B和C0三个输入最大就是三个都为1和为11情况,所以最多也就产生一个为1进位。...那现在就很明了,这进位要么在计算A加B产生(A和B都是1)要么在加进位产生(A和B其中只有一个为1,进位输入为1),所以只要将两次加和进位输出做一次或运算,就取得了进位输出。...但其实对于上一位进位输出可以根据输入自己去计算得到,即某一位An可以利用前面几位A1、A2、...、An-1计算得到不必等待,虽然这样使计算更多了但实际速度确是提升

    2.7K10

    计算ip地址有效范围_ip地址如何计算

    :255.255.254.0 网关:192.168.9.1 1:IP地址 = 网络地址 + 主机地址,二进制为: 11000000 10101000 00001001 00000011 2:子网掩码二进制表示为...: 11111111 11111111 11111110 00000000 解析:前面1就是网络地址部分,后面0就是主机地址,所以此处有9位主机地址。...3:网络地址 = 子网掩码 & IP地址,即:192.168.8.0 4:广播地址 = 3求出网络地址主机地址部分置1,即:192.168.9.255 5:有效IP段计算: 开始地址 = 网络地址...+1,即192.168.8.1 结束地址 = 广播地址-1,即192.168.9.254 那么当前示例有效IP段为:192.168.8.1~192.168.9.254 版权声明:本文内容由互联网用户自发贡献...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。 ..

    3.5K10

    TomcatWebSocket如何实现

    TomcatWebSocket如何实现?...WebSocket一种在客户端和服务器之间提供长期、双向、实时通信协议全双工通信:WebSocket允许数据同时在客户端和服务器双向通信,无需像HTTP等待请求和响应循环单个TCP连接:建立一次连接后...SessionWebSocket,而不是servlet规范配置端口为8080,context path为/caicaiserver: port: 8080 servlet: context-path...方法@Overridepublic void afterSingletonsInstantiated() { registerEndpoints();}也就是单例Bean实例化之后执行,会扫描容器...WebSocket处理类对应方法进行调用(不会打到Container容器) 图片总结WebSocket一种长期、双向、实时通信协议,基于HTTP协议后升级为WebSocket协议Tomcat在处理

    30921

    Java注解如何工作

    这篇文章,我将向大家讲述到底什么注解,为什么要引入注解,注解如何工作如何编写自定义注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。...事实上,@Override告诉编译器这个方法一个重写方法(描述方法元数据),如果父类不存在该方法,编译器便会报错,提示该方法没有重写父类方法。...因此,我们讲解一下如何编写自定义Annotations。 我们来逐个讲述编写自定义Annotations要点。上面的例子,你看到一些注解应用在注解上。...信息 @Inherited – 定义该注释和子类关系 那么,注解内部到底如何定义呢?...在最新servlet3.0引入了很多新注解,尤其和servlet安全相关注解。

    1.7K21

    Java注解如何工作

    这篇文章,我将向大家讲述到底什么注解,为什么要引入注解,注解如何工作如何编写自定义注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。...事实上,@Override告诉编译器这个方法一个重写方法(描述方法元数据),如果父类不存在该方法,编译器便会报错,提示该方法没有重写父类方法。...我们来看两个例子:一个标准注解@Override,另一个用户自定义注解@Todo。 ? 对于@Override注释你可能有些疑问,它什么都没做,那它是如何检查在父类中有一个同名函数呢。...因此,我们讲解一下如何编写自定义Annotations。 我们来逐个讲述编写自定义Annotations要点。上面的例子,你看到一些注解应用在注解上。...信息 @Inherited – 定义该注释和子类关系 那么,注解内部到底如何定义呢?

    1.5K30

    JavaLambda如何实现

    在上面的字节码,我们可以看到一个名为 lambdamain0 方法,该方法在编译阶段自动生成,其对应于示例源码lambda方法体。...在main方法字节码,invokedynamic整个lambda实现关键,不过由于该字节码在JVM实现逻辑非常复杂,在这里我们就不看具体代码了,只说下大致思路。...那这个对象对应哪里来呢?对,也是动态生成。...依据上面的示例,我们再来总结下lambda如何实现: 在编译阶段,javac会自动生成一个lambdamain0方法,该方法对应了lambda方法体。...在Test$Lambda1类accept方法,其直接调用了编译阶段生成Test.lambdamain0方法,传入参数变量为arg Test.lambdamain0方法最终执行了lambda方法体代码

    1.1K30

    计算如何跑起来

    工作模式很简单,关键计算如何理解指令呢? 举个例子:在一个阳光明媚早上,你对你对象说:不去上班行不行?你对象娇滴滴回答:不去上班你养我啊? 针对这桥段,你仔细想想你对象脑子里怎么流转?...于是,计算内存程序载体,计算机只能理解数字,那么程序就必须被翻译成数字才能在计算运行。 程序要想运行起来,它将经历:程序 -> 编译(翻译)-> 机器语言。...) { j = i + i; } else { j = i - i; } 3 通过叙述,大概解释清楚了计算硬核元件CPU、内存、I/O,程序硬核内容数据、指令,程序存储在内存供...但是,我们知道内存连续,顺序执行顺理成章计算机理解,条件/循环执行呢?于是,就出现跳转指令,用于跳转到指定程序块。 ? 基于内存约束,数据也就是连续存储在内存。...参考:计算怎样跑起来

    66610
    领券