在我最近的做的一个同态里,常规的要排序需要将两数(鉴于核心技术看不到明文)相减,并且比较结果是否小于零来判断是否移位。而我所用的方案里第一步就要把数转换成无符号大整数ZZ_q类型,所以结果是不会输出负数的。那如何来判断两个数值未知的无符号数的大小呢。于是我写下本文来记录我所构造的几个方案。

核心思想——利用数值溢出来比较大小
虽然结果不会输出负数,但是无符号数会存在溢出的情况,比如一个无符号数的范围是在【0,216】那么-1转换成无符号数后就会变成2^16 - 1这么大的数。于是,就可以利用这个数之大来判断两数的大小。

  • 方案一
    设有两数 a b (前提是a,b均小于且不等于2^16的一半大小)
    如果有 a - b > a + b 则 a < b
    例如 a = 3, b = 5
    a - b = -2
    a + b = 8
    而在无符号数中 -2 是 2^16 - 2 这么大的数字,所以有 a - b > a + b
    如果 a = 5, b = 3时呢,那更不用说了,a - b 的结果只会是一个比 a+b 小的一个小整数。

这种方案虽然可行,但是还是效率太低了,因为比较两个数需要分别进行一次同态加减再解密比较大小。于是有了方案一的pro版。

  • 方案二
    我既然都限制了a,b都小于最大值的一半了,就可以把剩下一半都当作负数的范围。
    这样做有啥好处呢?好处就是我可以只算 a - b,而不用算 a + b 了,a - b > 2^15 就相当于 a - b < 0 了。即 a < b。
    无论方案一和方案二都把原来的无符号数范围缩小到一半了,这不影响计算吗?
    确实影响。但是我的范围是可调的,如过我根据原来的范围就先扩大一倍,那计算时再缩小一倍就相当于没有影响了。当然因为我的范围它跟计算效率是没有关系的,我可以把最大值调的尽可能大,在条件允许的情况下越大越好。

前两种方案解决了比大小问题,但是最后都需要用私钥来解密后才能比大小,可以解决两者的比大小问题。而我的方案里服务器拿不到私钥才是最安全可信的。而且我比大小的目的也不是排序,我的根本目的是为了去除最大值与最小值。于是我又构造了一个不需要服务器拿到私钥且不需要密文之间排序的方案pro max…

同态加密中无符号数之间比较大小相关推荐

  1. 【转+】C中的有符号数和无符号数之间的转换

    1. 在C语言中,数字常量如果没有后缀'U'或'u',则默认为是有符号数. 例: 其中1024和oxff这两个常量都是有符号数,这就意味着每个赋值操作包含了一个隐式的由有符号数到无符号数的类型转换. ...

  2. C中的有符号数和无符号数之间的转换

    1. 在C语言中,数字常量如果没有后缀'U'或'u',则默认为是有符号数. 例: [cpp] view plaincopy unsigned int n = 1024; unsigned int m  ...

  3. C语言中的有符号数和无符号数之间转换

    C语言中的有符号数和无符号数之间转换 我们都知道C语言中有有符号数和无符号数两种整数表示方法,并且支持相互转换. 那么具体相互转换有什么规则,我们今天来了解一下: 在C语言中当声明一个像12345或0 ...

  4. 有符号数与无符号数之间运算问题探究

    文章目录 有符号数与无符号数之间运算问题 例子: 问题探究: unsigned int变量跟int类型的变量运算时得出的结果是什么类型的? 逐步思考: 代码分析: 问题总结 例:1: 例2: 无符号和 ...

  5. C++中无符号数与有符号数的转换

    C++中的无符号数与有符号数的转换 1.无符号数转为有符号数 unsigned short int a = 50000;signed short int b = 0;b = a;cout <&l ...

  6. 【考研计组】有符号数与无符号数之间的转换

    楼主有话要说: 在复习<计算机组成原理>时,遇到了有符号数与无符号数之间转换的问题,为了应对这类问题,楼主仔细查阅资料再结合做题总结出一些心得,内容如下(如果有新的总结,会反复修改): 注 ...

  7. 有符号数和无符号数之间的转换

    有符号数和无符号数之间的转换 C语言运行各种不同的数据类型之间做强制类型转换,假设x为一个有符号整型变量,通过(unsigned)x可以将一个有符号整数转换为无符号整数. 对于16位,在一台采用补码机 ...

  8. 有符号数和无符号数之间的转换(2020)C

    有符号数和无符号数之间的转换 C语言允许在各种不同的数字数据类型之间做强制类型转换.例如,假设变量x声明为int,u声明为unsigned.表达式(unsigned)x会将x的值转换成一个无符号数值, ...

  9. java中有符号数和无符号数,C语言中无符号数和有符号数之间的运算

    C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. unsigned int和int进行运算 ...

  10. C语言中无符号数和有符号数之间的比较和运算

    学C语言的同学看看以下代码运行结果会多少 源代码 #include <stdio.h> void main(void) {unsigned char uchar_num = 1;char ...

最新文章

  1. JS高级程序设计第五章读书笔记
  2. ROS使用自定义消息类型
  3. eltree ref什么时候有_成功el-tree从接口取数据
  4. sql 相加_SQL经典题型
  5. (Python)零起步数学+神经网络入门
  6. 高级图形学之离散技术
  7. android 控件总结,Android制霸控件View总结
  8. redhat 中安装rpm包时遇到异常 “error: Failed dependencies:xinetd is needed by .”
  9. MyStringTokenize
  10. python搭建django环境_在BAE上搭建python,django环境小记
  11. iOS开发日记56-详解UIImage
  12. kitkat(KRT16S)刷入实机nexus4
  13. 【基于遥感解译与GIS技术】土地利用图、植被类型图、植被覆盖度图、土壤侵蚀制图
  14. 环绕声混响效果器-Acon Digital Verberate Immersive 2.2.1 WiN-MAC
  15. 模型预测控制路径跟踪python语言实现
  16. 多种前端框架的优缺点
  17. cocoscreator 接入 taptap 登录 防沉迷 实名认证
  18. 相机模型-鱼眼模型/Omnidirectional Camera(1)
  19. 机器学习:self-paced 和 fine-tuning
  20. 读研了,博客不更新嘞

热门文章

  1. 在 js 中应用 订阅发布模式(subscrib/public)
  2. 美国弗吉尼亚大学计算机科学,弗吉尼亚大学计算机科学系学位设置一览
  3. python使用numpy的np.mod函数计算numpy数组除以某一特定数值剩余的余数(remainder)、np.mod函数和np.fmod函数对负值的处理方式有差异
  4. 移动端自动化测试实战(一)
  5. 苹果笔记本什么系统_怎么把苹果笔记本系统改为win7系统?
  6. openvswitch vxlan 源码分析
  7. Vue 作者尤雨溪,引路中国程序开发
  8. 交大天坑专业转码记录
  9. centos7 更新 Firefox 版本
  10. python写微信小程序商城,oejia_weshop