在我最近的做的一个同态里,常规的要排序需要将两数(鉴于核心技术看不到明文)相减,并且比较结果是否小于零来判断是否移位。而我所用的方案里第一步就要把数转换成无符号大整数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. Java h265视频抽帧提取照片支持Window,Linux
  2. div与span区别及用法
  3. 数据结构(严蔚敏)之四——链栈之c语言实现
  4. Oracle之垂直水平分库分表(二)
  5. 超完美截图工具snipaste的下载使用
  6. Linux下,C++编程论坛题目抽取
  7. 信息学奥赛一本通C++语言——1062:最高的分数
  8. 主板检测卡c5_电脑开机停在主板logo
  9. sqlmap教程(burpsuit辅助)
  10. 43w+条手机电话号码归属地数据库免费下载·附区号邮编
  11. CGJ02、BD09、西安80、北京54、CGCS2000常用坐标系详解
  12. 什么是starup?
  13. 项目文档:IT项目管理
  14. 面试宝典之深度学习面试题(下)
  15. 常用浏览器内核!IE,Chrome ,Firefox,Safari,Opera 等内核
  16. 机器学习初探:(十一)主成分分析
  17. 彪悍的人生不需要解释!
  18. 2022年中式面点师(中级)复训题库及模拟考试
  19. 融云会话界面自定义功能_Android快速集成融云
  20. 不是买一台电脑就能敲代码!学习java必须了解的计算机知识以及准备工作

热门文章

  1. 网络教育本科统考计算机和英语作文,远程教育本科统考英语真题及答案
  2. mysql secure_file_priv 属性相关的文件读写权限问题
  3. python 安装scapy_安装scapy时出错
  4. 【听】了不起的盖茨比,美国梦的破碎
  5. java happen-before_Java内存模型happen-before的实现原理
  6. Shell脚本自动化部署实战(一)
  7. 太阳直射点纬度计算公式_高中地理:正午太阳高度公式的应用
  8. cryengine3 C++添加结点,制作插件
  9. 2012人类将从“微博体”过渡到“微媒体”。至于你信不信,反正我信了
  10. iOS 用户信息存储的工具类