ziggle

Hail Hydra


  • Home

  • Archives

  • Search

android-设备标识

Posted on 2020-06-18

IMEI (手机的身份证号码)

Android 10 获取不到
IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的 电子串号 ,它与每台移动电话机一一对应,而且该码是全世界唯一的。每一只移动电话机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。

有些设备的IMEI有两个,可以在拨号键盘输入 *#06# 查看。普通APP获取需要申请权限():

2.IMSI (SIM卡的身份证号码)

IMSI 是区别移动用户的标志,储存在 SIM卡中,可用于区别移动用户的有效信息。其总长度不超过15位,同样使用0~9的数字,例如460010280100023。其中MCC是移动用户所属国家代号,占3位数字,中国的 MCC 规定为 460,MNC 是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网,MSIN是移动用户识别码,用以识别某一移动通信网中的移动用户,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
android.os.Build.BRAND: 获取设备品牌
android.os.Build.MODEL : 获取手机的型号 设备名称。
android.os.Build.MANUFACTURER:获取设备制造商
android.os.Build.BOARD: 获取设备基板名称
android.os.Build.BOOTLOADER:获取设备引导程序版本号
android.os.Build.CPU_ABI: 获取设备指令集名称(CPU的类型)
android.os.Build.CPU_ABI2: 获取第二个指令集名称
android.os.Build.DEVICE: 获取设备驱动名称
android.os.Build.DISPLAY: 获取设备显示的版本包(在系统设置中显示为版本号)和ID一样
android.os.Build.FINGERPRINT: 设备的唯一标识。由设备的多个信息拼接合成。
android.os.Build.HARDWARE: 设备硬件名称,一般和基板名称一样(BOARD)
android.os.Build.HOST: 设备主机地址
android.os.Build.ID:设备版本号。
android:os.Build.PRODUCT: 整个产品的名称
android:os.Build.RADIO: 无线电固件版本号,通常是不可用的 显示unknown
android.os.Build.TAGS: 设备标签。如release-keys 或测试的 test-keys
android.os.Build.TIME: 时间
android.os.Build.TYPE:设备版本类型 主要为"user" 或"eng".
android.os.Build.USER:设备用户名 基本上都为android-build
android.os.Build.VERSION.RELEASE: 获取系统版本字符串。如4.1.2 或2.2 或2.3等
android.os.Build.VERSION.CODENAME: 设备当前的系统开发代号,一般使用REL代替
android.os.Build.VERSION.INCREMENTAL: 系统源代码控制值,一个数字或者git hash值
android.os.Build.VERSION.SDK: 系统的API级别 一般使用下面大的SDK_INT 来查看
android.os.Build.VERSION.SDK_INT: 系统的API级别 数字表示

HTTPS 的实现原理

Posted on 2020-06-10

HTTPS实现过程

在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段.

HTTPS 的整体过程分为证书验证和数据传输阶段,具体的交互过程如下:

Read more »

Linux 环境变量作用及其加载顺序

Posted on 2020-06-08

最近在在 Linux 服务器上总是遇到已经配置了 JAVA 环境变量, 却还是提示 command not found, 于是特意查了下 Linux 配置环境变量的几个文件的加载顺序.

1
/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

其中, 几个文件的作用如下:

系统级:
1./etc/environment:是系统在登录时读取的第一个文件, 该文件设置的是整个系统的环境, 只要启动系统就会读取该文件, 用于为所有进程设置环境变量.系统使用此文件时并不是执行此文件中的命令, 而是根据而是根据KEY=VALUE模式的代码, 对KEY赋值以VALUE, 因此文件中如果要定义PATH环境变量, 只需加入一行形如 PATH=$PATH:/xxx/bin的代码即可.

2./etc/profile:此文件是系统登录时执行的第二个文件. 为系统的每个用户设置环境信息, 当用户第一次登录时, 该文件被执行.并从 /etc/profile.d 目录的配置文件中搜集 shell 的设置.( /etc/profile可以用于设定针对全系统所有用户的环境变量, 环境变量周期是永久性).

3./etc/bashrc:是针对所有用户的bash初始化文件, 在此中设定的环境变量将应用于所有用户的 shell 中, 此文件会在用户每次打开 shell时执行一次.(即每次新开一个终端, 都会执行 /etc/bashrc).

用户级(这些文件处于家目录下):
1.~/.profile:对应当前登录用户的 profile 文件, 用于定制当前用户的个人工作环境(变量是永久性), 每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的 .bashrc文件.这里是推荐放置个人设置的地方.

  1. ~/.bashrc:该文件包含专用于你的bash shell的 bash信息, 当登录时以及每次打开新的shell时, 该文件被读取.(~/.bashrc只针对当前用户, 变量的生命周期是永久的).不推荐放到这儿, 因为每开一个shell, 这个文件会读取一次, 效率肯定有影响.

  2. ~/.bash_profile or ~./bash_login:~/.bash_profile是交互式login 方式进入 bash 运行的, ~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同, 所以通常前者会调用后者.每个用户都可使用该文件输入专用于自己使用的shell信息, 当用户登录时, 该文件仅仅执行一次.默认情况下, 他设置一些环境变量, 执行用户的 .bashrc 文件.(如果~/目录下没有 .bash_profile则新建立一个)这里是推荐放置个人设置的地方.当一个shell关闭时, 在 bash_profile 中定义的系统变量则会失效.因此, 每打开一个新的shell时都要运行一次 source bash_profile. 而且针对当前用户.

4.~/.pam_environment:用户级的环境变量设置文件, 没有做测试, 不知道管不管用.

5.~/.bash_logout:当每次退出系统(退出bash shell)时, 执行该文件.另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是”父子”关系

Diffie-Hellman 算法

Posted on 2020-06-05

D-H算法的数学基础是离散对数的数学难题,其加密过程如下:

(1)客户端与服务端确定两个大素数 n和 g,这两个数不用保密
(2)客户端选择另一个大随机数x,并计算A如下:A = g^x mod n
(3)客户端将 A 发给服务端
(4)服务端选择另一个大随机数y,并计算B如下:B = g^y mod n
(5)服务端将B发给客户端
(7)计算秘密密钥K1如下:K1=B^2 mod n , 计算秘密密钥K2如下:K2=A^y mod n , K1=K2,因此服务端和客户端可以用其进行加解密

How QUIC works?

一、基于TCP+TLS的HTTP2建连

出于HTTP的明文和无法验证服务器的真实性,在TCP的基础上引入了TLS协议,目前广泛使用的HTTPS是基于TCP+TLS协议,HTTP2也被主流浏览器默认支持TLS。

但对于建立连接的耗时而言,TCP本身就需要握手时延,而TLS协议为了使得客户端和服务器端在不安全的网络通信中协商出后续安全通信所需的加密私钥,更是要经过额外2次RTT(RoundTrip Time往返时间)

图3 TCP+TLS建连过程

除了TCP建立连接过程,TLS握手过程要经过如下步骤:

1、客户端提供加密套件(算法)列表,版本等信息

2、服务器端提供自己的证书,选择的加密套件,非对称加密公钥(自己保留私钥)等

3、客户端提供自己的证书,用服务器公钥和加密套件加密的自己的私钥

4、服务端用保留的私钥解密客户端传来的加密私钥,得到的私钥即为后续加密传输使用的对称密钥,最后完成握手

此时,双方协商出了对称密钥。基于TCP+TLS的HTTP2建连过程结束,大约需要耗时200-300ms。

二、 QUIC建连

为了保证安全,QUIC也是加密传输数据的,所以在QUIC的建连过程中也需要双方协商出一个加密私钥。但与TLS不同,QUIC采用的加密算法仅需要一个RTT就能实现密钥交换,并且该算法也被用于目前正在草案阶段的TLS1.3协议。该就是Diffie-Hellman密钥交换算法。

图4 Diffie-Hellman算法

可以看到,客户端和服务端各自保留了自己的私钥a和b,通过交换各自的公钥B和A,以及基底G和很大的质数P,双方就能计算出相等的私钥S,这个S就是加密传输的对称密钥。

另外,根据离散对数的不可逆,即使拿到G,P,和质数B,也很难推导出私钥b(同理私钥a),也就保证了计算密钥的安全。

该过程对应到QUIC建连的过程中如下图。

图5 1RTT建连

1、客户端发起Inchoate client hello

2、服务器返回Rejection,包括密钥交换算法的公钥信息,算法信息,证书信息等被放到server config中传给客户端

3、客户端发起client hello,包括客户端公钥信息

此时,双方各自计算出了对称密钥。QUIC的1RTT建连过程结束,平均只耗时100ms以内。

后续发起连接的过程中,一旦客户端缓存或持久化了server config,就可以复用并结合本地生成的私钥进行加密数据传输了,不需要再次握手,从而实现0RTT建立连接。

linux_variables

Posted on 2020-06-02

How do I add environment variables?

  • To set variable only for current shell:

VARNAME="my value"

  • To set it for current shell and all processes started from current shell:

export VARNAME="my value"
shorter, less portable version

  • To set it permanently for all future bash sessions add such line to your .bashrc file in your $HOME directory.

  • To set it permanently, and system wide (all users, all processes) add set variable in /etc/environment:

sudo -H gedit /etc/environment

This file only accepts variable assignments like:

VARNAME="my value"

Do not use the export keyword here.

You need to logout from current user and login again so environment variables changes take place.

1…456…22
ziggle

ziggle

Hail Hydra !

110 posts
45 tags
RSS
GitHub
© 2021 ziggle
Powered by Hexo
|
Hail Hydra—