Android 开发之路之加解密

安卓逆向工程师面试指南【干货】 安卓逆向工程师岗位在近年来算是互联网IT行业的香饽饽之一,月薪动辄上万年薪动辄20万,让很多行业内兢兢业业拿一个五六千的外行人士很是羡慕。但是安卓逆向工程是专业技术要求很高的职业,外行人轻易抢不走你的饭碗,因此也有大量的人花很多金钱投资自己,学会了安卓逆向,想要入行分一杯羹。 光学会技术,并不等于就能找到一份好的工作。要找到一个很好的安卓逆向工程师岗位,我们一定不能忽视其中最为重要的环节——面试。 安卓逆向工程师在面试时,需要你掌握什么技能,面试官会怎样考核你?这些东西对于一位安卓逆向求职者来说,至关重要. 阅读详情

一、前言

 

        由于工作原因涉及到国密算法,加上自身对密码学的相关知识又不是很了解。经过一段时间的查找资料、请教公   司同事之后,诞生了这篇对密码学的知识梳理。

首先我们先回答一个问题信息

 

二、为什么要进行加密?

 

       所谓加密,就是对信息进行重新编码,从而达到隐藏信息内容,使非法用户无法获取信息真实内容的一种技术手段。发送方用加密密钥,通过算法(或加密设备),将信息加密后发送出去。接收方在收到密文后,用解密密钥将密文解密,恢复为明文。即使信息在传输过程中被窃取,窃取者也只能得到无法理解的密文,从而对信息起到保密作用。任何一个加密系统至少包括四个组成部分:未加密的报文(明文)、加密后的报文(密文)、用于加解密的设备或算法和用于加解密的密钥。

加密技术用于提供以下功能: 

 • 机密性。确保数据的保密性。机密性通常是使用加密实现的。可以使用加密算法(使用加密密钥)将明文转换为密文,并使用相应的解密算法将密文转换回明文。对称加密算法使用相同的密钥进行加密和解密,而非对称算法则使用公钥/私钥对。

• 数据完整性。确保数据免受意外或者故意(恶意)的修改。完整性通常是由消息身份验证代码或哈希值提供的。哈希值是从数据序列导出的固定长度的数值。哈希值用于验证通过非安全通道传送的数据的完整性。可以将收到的数据的哈希值与传送时数据的哈希值进行比较,以确定数据是否被篡改。

• 身份验证。保证数据来自某一方。数字证书用于提供身份验证。数字签名通常应用于哈希值,因为这些值比它们所代表的源数据小得多。

加密技术分为两类:即对称加密(私人密钥加密)和非对称加密(公开密钥加密)。对称加密以数据加密标准(DES,Data Encryption Standard)算法为典型代表,非对称加密通常以RSA(Rivest Shamir Ad1eman)算法为代表。对称加密的加密密钥和解密密钥相同,而非对称加密的加密密钥(公钥)和解密密钥(私钥)不同,加密密钥可以公开而解密密钥需要保密。

 

三、加密和编码的区别

 

我们需要弄清什么是编码,什么是加密,什么是摘要。

 

3.1编码

 

      编码的本质是信息形式的转化。编码的目的不是为了加密信息,而是将消息转化成统一的格式,方便在不同系统之中传输。例如最常见的ASCII字符编码。由于网络上只能传输二进制数据,任何数据。如果想要经由网络传输,就必须先转化成二进制,ASCII 提供了一个将A、B、C等字母转化为二进制的规则。信息—>编码—>二进制—>解码—>信息。解码是编码的逆过程。从概念上可以看出,编码知识表现形式的转换,并没有保密作用。因为编码和解码的算法是公开的,只要知道是什么编码的内容,任何人都可以轻松地解码。常用的编码:Base64,16进制、Base32、UTF-8、GBK等等。对于无损编码,我们都可以通过解码的方式恢复出原文。

 

3.2 加密

 

    加密就是对明文按照某种算法进行处理,是其变成不可读的一段代码,达到一种保护数据的目的。加密算法分为:对称加密和非对称加密。有的笔者把hash算法也算成一种加密,这是有争议的。严格的讲,hash算法并不能起到加密的作用,它是不可逆的,而且有些算法已经通过碰撞被破解了。这里我把它单独拿出来。

 

四、什么是对称加密技术?

在对称加密体系中,对信息的加密和解密都使用相同的密钥,信息的发送者和接收者在进行信息的传输与处理时,必须共同持有该对称密钥。最典型的对称加密算法有美国的DES(数据加密标准)和欧洲的IDEA(国际数据加密算法)。

 对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DNS的加密性好,而且对计算机功能要求也没有那么高。IDEA加密标准由PGP(Pretty Good Privacy)系统使用。

 对称加密系统的安全性依赖于以下两个因素。第一,加密算法必须是足够强的,仅仅基于密文本身去解密信息在实践上是不可能的;第二,加密方法的安全性依赖于密钥的秘密性,而不是算法的秘密性。因算法不需要保密,所以制造商可以开发出低成本的芯片以实现数据加密,这些芯片有着广泛的应用,适合于大规模生产。对称加密的优点是计算开销小,加解密速度快,保密性强,适合大数据量的加密。对称加密最主要的问题是密钥的分发和管理非常复杂、代价高昂。由于对称加密在发送、接收数据之前必须完成密钥的分发,而且必须为每个传送的对象创建不同的单一密钥,这样导致随着用户的增加,密钥的需求量成倍增加。比如对于具有n个用户的网络,需要n(n-1)/2个密钥。密钥的分发与管理是该加密体系中的最薄弱的环节,各种基本的手段均很难保障安全地完成此项工作。对称加密算法另一个缺点是不能实现数字签名。

五、什么是非对称加密技术?

      公开密钥密码体系是现代密码学的最重要的发明和进展。保护信息传递的机密性仅仅是当今密码学主题的一个方面;对信息发送与接收人真实身份的验证、对所发出/接收信息的不可抵赖以及保障数据的完整性正是现代密码学主题的另一方面。公开密钥密码体系对这两方面的问题都给出了出色的解答,并正在继续产生许多新的思想和方案。

       在公钥密码体系中,每个实体都有一对互相匹配的密钥:公开密钥和私有密钥。公开密钥为一组用户所共享,用于加密或验证签名;私有密钥仅为证书拥有者本人所知,用于解密或签名。这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。若以公钥作为加密密钥,以私钥作为解密密钥,则可实现多个用户加密的信息只能由一个用户解读;反之,以用户私钥作为加密密钥而以公钥作为解密密钥,则可实现由一个用户加密的信息而多个用户解读。前者可用于数字加密,后者可用于数字签名。常用的公开密钥算法有RSA、DSA和Diffie Hellman等。

       公钥加密技术适应网络的开放性要求,解决了密钥的发配和管理问题,比如对于具有n个用户的网络,仅需要2n个密钥。另外,使用公钥加密还能够很容易地实现数字签名,从而使进行数据通信的双方可以安全地确认对方身份。公钥加密的缺点是其算法复杂,加密数据的速度较低,不适合大数据量的加密。

       非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。 

       RSA算法是Rivest、Shamir和Adleman于1977年提出的第一个完善的公钥密码体制,其安全性是基于分解大整数的困难性。在RSA体制中使用了这样一个基本事实:到目前为止,无法找到一个有效的算法来分解两大素数之积。RSA算法的描述如下:

公开密钥:n=pq(p、q分别为两个互异的大素数,p、q必须保密)

 e与(p-1)(q-1)互素

 私有密钥:d=e-1 {mod(p-1)(q-1)}

 加密:c=me(mod n),其中m为明文,c为密文。

 解密:m=cd(mod n)

       利用目前已经掌握的知识和理论,分解2048bit的大整数已经超过了64位计算机的运算能力,因此在目前和预见的将来,它是足够安全的。

       对称加密算法的难点在于密钥的分发,非对称加密的算法的缺点是性能比较低。结合二者的优点,使用非对称加密算法协商密钥(密钥一般都不长),使用对称加密算法加密发送的内容,可以有效地解决两种加密算法的缺点,SSL/TLS正式这种思想的一个实现。

六、消息摘要算法

      消息摘要算法即采用单向HASH算法将需要加密的明文进行摘要,而产生的具有固定长度的单向散列(HASH)值。其中,散列函数是一种将大量数据映射到较小量数据的单向数学函数,满足:对原信息的少量改动(即使是一个BIT),可以导致结果的巨大变化。消息摘要算法主要有SHA1、MD5、MD2等标准,一般用于和公钥加密一起提供安全的数字签名方法。

MD2,MD4和MD5(MD表示信息摘要)是由Ron Rivest 设计的专门用于加密处理的,并被广泛使用的HASH函数,它们产生一种128位信息摘要,除彻底地搜寻外,没有更快的方法对其加以攻击,而其搜索时间一般需要1025年之久。

       单向HASH函数用于产生信息摘要。HASH函数主要可以解决以下两个问题:在某一特定的时间内,无法查找经HASH操作后生成特定HASH值的原报文;也无法查找两个经HASH操作后生成相同HASH值的不同报文。这样在数字签名中就可以解决验证签名和用户身份验证、不可抵赖性的问题。

 信息摘要(Message Digest)简要地描述了一份较长的信息或文件,它可以被看作一份长文件的“数字指纹”。信息摘要用于创建数字签名,对于特定的文件而言,信息摘要是唯一的。信息摘要可以被公开,它不会透露相应文件的任何内容。

举一个例子:

第一步:A要给B发送一个文件,他首先用哈希算法对文件进行加密得到哈希值,称之为摘要,取名HashA。

第二步:对生成的哈希值进行私钥加密,称之为数字签名。

第三步:A将数字签名和文件一起发送给B。

第四步:B对数字签名进行公钥解密得到Hash值即摘要,如果成功表示来自A。

第五步:B和A一样对正文进行摘要得到Hash值,取名HashB,对比同A的HaahA.如果一致表示文件没有被篡改。

 

关于加解密,主要内容就这么多。

欢迎关注我的个人公众号,一起探讨开发相关的知识。

【鸿蒙实战开发】基于加解密算法框架的常见规格问题 对于加解密在HarmonyOS和安卓相互转换,以及HarmonyOS、安卓互调的各种场景下使用密文密钥的问题。应用经常会遇到如下的业务诉求:场景一:SM2加解密,安卓和HarmonyOS的sm2密文,密钥格式不符,不能直接使用,需要一定的转换。场景二:AES加解密,缺少基础的加解密示例,在原有的文档示例基础上不知道如何修改。对于使用sm2加解密,安卓生成的密钥拿到HarmonyOS使用如何导入,密文如何去转换、HarmonyOS生成的密文如何拿到安卓去解密。 阅读详情

相关推荐

【Android】【Java】一款简单的文本/图像加解密APP

本文介绍了一款名为"加密者"(Encrypter)的安卓应用,该应用基于Java开发,实现了无失真的图像加解密功能,同时支持基本的文本加解密操作。文章首先指出之前PC端Java实现的图像加密算法存在图像失真问题,新开发的安卓应用解决了这一问题。文章展示了应用的登录页面和主页面设计,提供了相应的XML布局代码。登录界面包含用户名、密码输入框和登录按钮,主页面则集成了文本输入框、加密/解密按钮以及结果显示区域。该应用仅供学习使用,作者强调了技术分享的初衷并注明需转载出处。

weixin_43031313的博客 401

【国密】Libcurl的Android库编译流程及使用详解

本文旨在提供一个Android libcurl 国密库的编译流程和使用详解国密算法(SM2/SM3/SM4)是中国国家密码管理局颁布的密码算法标准,用于安全通信、数字签名等领域,本文将使用libcurl库,因为它是一个广泛使用的,支持多种协议的网络传输库,所以需要将libcurl库与国密算法结合使用以实现国密通信~若还有问题随时评论联系我~

无方少年游 2012

【Android面试八股文】你们app开发的时候有日志加解密吗?是怎么实现日志加解密的?

Mars 是微信官方的跨平台跨业务的终端基础组件。comm:可以独立使用的公共库,包括 socket、线程、消息队列、协程等;xlog:高可靠性高性能的运行期日志组件;SDT: 网络诊断组件;STN: 信令分发网络模块,也是 Mars 最主要的部分。腾讯的Mars库中的Xlog模块是一款高效的跨平台日志组件,广泛用于移动应用和后台服务的日志记录。Xlog不仅具备高性能的日志写入能力,还支持日志的加密和压缩,保证日志数据的安全性和存储效率。以下是Xlog的详细介绍,包括其用于日志加解密的功能。

字节卷动 657

安卓 Java 使用国密SM3算法

国密算法SM3 Android使用 使用bcprov-jdk15on-1.60.jar和bcpkix-jdk15on-1.60.jar,下载地址 代码如下: Security.addProvider(BouncyCastleProvider()) var md: MessageDigest? = null md = MessageDigest.getInstance("SM3", "BC") va...

m18826235461的博客 3050

Android + java实现国密算法SM2、SM3、SM4加解密

资源包含jar包源代码和测试demo,可直接使用,本Demo是用Android代码来实现的【国密SM2、SM3、SM4】的算法,Java均可使用,代码叫简洁,每个加密算法几行代码均可实现

Android调用大宝CA国密SSL密码套件(0.99版本)访问国密SSL安全服务的示例代码

使用方法见:https://blog.youkuaiyun.com/upset_ming/article/details/89048916 1. 支持国密SSL单向认证和双向认证 2. 获取服务端的国密数字证书 3. 适用于Android 7.0(API 24)及以上

android 国密签名,关于国密 (sm2,sm3,sm4)在Linux、python、Android、java、ios中的...

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4和最新的sm9。在国内环境主要使用的国家密码局认定的算法。SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线...

weixin_33048525的博客 4225

【QGIS、OSM】利用python开源工具实现指定区域的交通分配

如果从osmgnms和grid2demand得到的node.csv,我们要修改path4gnms代码中的utils.py的四处设置。利用QGIS实现可视化,得到的link_performance.csv,参数有volume和VOC。改完这四处代码,就可以运行path4gnms中的tutorial.ipynb了。

weixin_40594084的博客 1276

基于国密算法的移动端加密应用开发实践指南

国密算法在移动应用安全中扮演着越来越重要的角色。通过正确的技术选型和最佳实践,开发者可以构建高安全性的移动应用,有效保护用户数据。资深移动安全开发工程师,专注于国产密码技术在移动应用中的实践与创新。

qq_35827191的博客 1367

光流法实战:如何用OpenCV的Farneback算法实现图像对齐(附调参技巧)

本文详细介绍了如何使用OpenCV的Farneback稠密光流算法实现图像对齐,包括核心原理、参数调优和工程实现。通过实战代码和参数优化策略,帮助开发者解决动态场景中的图像对齐问题,提升多帧融合和视频处理的效果。

weixin_29266007的博客 291

Unity动态创建Avatar骨骼映射

Unity Avatar骨骼映射动态创建,适配Unity通用动画,无需经过第三方建模软件,可运行时创建

Nbin_Newby的博客 1万+

sm1 sm2 sm3 sm4

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。 SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。 SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RS...

gutou9 1995

置顶必读(1) | 《YOLOv26实战:从入门到深度优化》专栏导读与完整目录导航(持续更新中)

🏆 本文收录于 《YOLOv26实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现 YOLOv26 官方特性、核心改进、多任务支持、部署优化与行业落地,内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么用”,更讲“为什么这样设计、如何真正落地到项目中”。

**My Coding Family** 9万+

安卓开发基于KeyStore对数据进行加解密

本文初步介绍了Android基于KeyStore对数据进行加解密的基本过程和用法

baorant24的博客 844

车间数据孤岛终于破了!C#上位机+MQTT打通产线与MES,数据延迟从小时级降到秒级

本文针对工业上位机开发中常见的车间数据与企业管理系统(MES)割裂问题,提出基于C#和MQTT协议的完整解决方案。通过EMQX MQTT Broker实现数据实时双向传输,将质量追溯时间从2小时缩短至10秒,生产计划自动下发,实现秒级数据延迟。方案采用分层解耦架构,支持设备更换和系统升级,核心优势包括低延迟、高可靠性和易扩展性。文章详细介绍了MQTT协议选型理由、整体架构设计、技术选型(EMQX Broker和MqttNet客户端),并提供了C#实现代码和部署流程。该方案已在实际产线验证,可有效解决&quo

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 480

5G射频到底是啥?方案怎么搭?工作流程、SAW选型、PA选型一口气讲透(工程师秒懂版)

很多人一提 5G 射频,脑子里先冒出来的是几个零件名:👉 PA👉 LNA👉 SAW👉 天线👉 开关但真正做方案时,这些东西不是一堆分立器件,而是一条完整的“信号流水线”。更准确地说,。Qualcomm 对 RFFE 的定义就是“把信息转换成可发送的射频信号,并把接收到的信号转换回有用信息”的那一整套组件。

weixin_43199439的博客 534

Android开发秘籍:接口加解密全解析

在当今数字化时代,数据就是企业和用户的生命线。想象一下,你辛苦经营的电商应用,用户的订单信息、支付数据等在网络传输中被轻易窃取;又或者社交应用里,用户的聊天记录、个人隐私被窥探 ,这不仅会给用户带来巨大损失,企业也将面临信任危机、法律纠纷和经济赔偿。回顾那些令人触目惊心的数据泄露事件,如 2017 年,Equifax 公司的数据泄露事件影响了加拿大、英国和美国的大量用户,客户的出生日期、驾驶执照号码、姓名和社会安全号码等个人数据被暴露 ,其根本原因之一就是数据在传输和存储过程中缺乏足够的加密保护。

qq_32890771的博客 277

SAP自动化-ME51N批量创建采购申请

2、需要管理员授权RZ11脚本录制回放功能。1、仅限于正对SAP日常工作的批量处理。3、数据模板按实际需求更新。物料编码,工厂,数量。

小九啥也不会 530

android文件加解密开发,Android文件加密解密的实现

【实例简介】最近项目中需要用到加解密功能,言外之意就是不想让人家在反编译后通过不走心就能获取文件里一些看似有用的信息【实例截图】【核心代码】TestCipher└── TestCipher├── AndroidManifest.xml├── bin│ ├── AndroidManifest.xml│ ├── classes│ │ └── com│ │ └── exa...

weixin_29958955的博客 367

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

鸿蒙开发5.0案例分析:基于加解密算法框架的常见规格问题

2、对于安卓加密的密文,HarmonyOS这边的格式是ASN.1包裹的格式,因此HarmonyOS这边解密的时候,需要先序列化:HexStrTouint8Array(new SM2_Ciphertext().i2d_SM2_Ciphertext(“安卓的密文”));对于GCM的参数设置,这里给了IV的,其余参数参考IV的写法即可。1、对于传入的密钥中公钥是带04的的十六进制的130位字符串,在传入的时候,密钥参数对应的格式为 04+x+y,x和y的长度是一致的,私钥的十六进制就直接放入对应的参数即可。

2501_91726121的博客 862

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

基于安卓系统的SM4-SM2/3加解密软件开发报告

目 录 第一章需求分析 1.1软件功能需求 1.2平台需求 1.3人员分工 第二章概要设计 2.1 软件开发平台 2.2 软件基本流程 2.3 UML图 第三章 程序详细设计 3.1 程序接口设计 3.2 SM2、3算法设计 3.3 SM4算法设计 3.4 UI设计 第四章 调试分析 4.1 出现问题及解决方案 第五章 结果测试 5.1 SM2\3测试结果 5.2 SM4 测试结果 5.3 软件整体测试 第六章总结与感想 6.1 总结与感想 6.2 未来展望 第七章附录 7.1 各部分代码及其注释 第一章

qq_44465615的博客 4256

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java中RSA加解密的实现,android视频开发面试

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!上面分享的字节跳动公司2020年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。详情可以点击我的【Github】如果你熟练掌握【Github】中列出的知识点,相信将会大大增加你通过前两轮技术面试的几率!这些内容都供大家参考,互相学习。

2401_83620927的博客 768

Android直播开发之旅(14):使用RC4算法加解密音视频流

1. RC4算法简介与原理  RC4加密算法是Ron Rivest在1987年设计出的密钥长度可变的加密算法族,它是一种面向字节操作的对称加密算法,且属于对称密码算法中的序列密码(streamcipher,也称为流密码)。RC4算法采用的是输出反馈(OFB,oupt-feedback)工作方式,该方式允许用一个短的密钥产生一个相对较长的密钥序列,并且它与分块加密算法(CBC,cipherblock...

老蒋也疯狂 3243

Android开发 使用jni对字符串加解密实现分析

最近项目有个需求,就是要对用户的敏感信息进行加密处理,比如用户的账户密码,手机号等私密信息。在java中,就对字符串的加解密我们可以使用AES算法加密字符串,使用它的好处就不必多说了,但我们又知道android的源代码是可以被反编译的,所以使用纯Java方式的AES加密是不安全的,所以想到了使用android中的jni来对字符串加解密处理,它会产生一个.so文件,更重要的是它通过C/C++代码实现

SunshineBoy的博客 564
上一篇: Android开发之路UI篇:ConstraintLayout
下一篇: AndroidIPC通信之AIDL
FlyRabbit_1
博客等级 码龄10年 4粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值