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

# 如何安全地保存密码?

生出一个临时加密密钥 auth_key 通过 stretch_key 为密钥,"master key" 为内容,用 HMAC-SHA256生出主密钥一部分 partial_key 使用加密算法级别的随机数生成器生成...这样,我们从一个简单用户密码,生成一系列安全密钥,最终得到一个安全主密钥,以此就可以类似 BIP44 那样,通过主密钥和一个描述应用程序字符串,派生出应用程序所需要密码。...这个过程,生成主密钥随机数 seed 很重要,需要保存起来,因为任何应用程序密码创建和恢复都需要这个 seed 和用户密码才能得到主密钥。...auth_key 加密 seed 使用了 ChaCha20 算法(TLS 1.3 推荐算法之一,提供 256 位安全性) 然后手痒用 rust 实现了一个简单小工具:cellar。...看到 Signal 这篇文章后,我按捺不住心头激情 —— 终于可以用 rust 做一个似乎有点什么工具了!

1.1K10

Rust日报】2020-09-05 微软在c++静态分析工具实现了一些rust安全规则

我们越来越多地听到来自客户和安全研究人员呼吁,认为c++语言应该有更强安全保证。...在这篇文章,我描述了这种变化以及从中可以期待什么。 在错误完整路径问题:如下所示简单程序将导致类型错误。 fn main() { let a = vec![vec!...,在上述错误,造成认知负担最大因素是类型和特征完整合格路径(例如std::vec:: vec)。...文章链接,https://blog.aloni.org/posts/path-trimming-in-rust-nightly/ 窥视Rust枚举(enum)内部 在我twitch频道最近Rust...问答环节,有人问了一个看起来很简单问题:为什么像SmartString或SmolStr这样小字符串类型和string一样大小,而像SmallVec这样小vec类型却比vec大?

48440
您找到你想要的搜索结果了吗?
是的
没有找到

Gopher转Rust辣眼睛语法排行榜

目标是通过编译器自动检查来保证所有引用使用都应该是绝对安全。 不过在设计过程,我未能抵抗住诱惑,引入了空引用概念,因为它非常容易实现。...就是因为这个决策,引发了无数错误、漏洞和系统崩溃,在之后四十多年中造成了数十亿美元苦痛和伤害。 我们写golang也经常因为访问了nil对象引发错误,而rust抛弃了这一做法。...Rust枚举和匹配非常强,应用非常广泛,你可能会说咱也有switch case啊,然后在rustenum 和match面前就是个弟弟. enum Message { Quit, Move...| TOP 2 包管理 cargo包管理是很舒服,gopher们应该经常遇到编码十分钟,依赖解决一整天情况,这在rust里面,不存在。...说三遍,书中例子你看懂了,再简单你不一定能自己写出来,能写出来也不一定能编译过去,所以动手非常重要。 总结,把一些难点东西总结出来,写博客什么,这个过程会让你重新思考,理解更深入。

66610

Rust实战系列-复合数据类型

本小节讨论提示错误不同方法,首先是其他编程语言中常见方法,然后是 Rust 中常用方法。 修改已知全局变量 最简单方法是检查全局变量值,尽管这样很容易出错,在系统编程也很常见。...什么是 Result 呢?Result 是 Rust 标准库定义一个 enum 类型,和其他类型具有相同地位,但通过社区约定和 Rust 语言其他部分联系在一起。...: (1)通常和 Rust match 一起使用,构建健壮、可读代码 (2)和 struct 一样,可以通过 impl 添加方法 (3)Rust 枚举不只是一组常量,还可以在变量包含数据,赋予类似...),伪类型 self 是最终实现 Read 类型占位符 符合所需类型签名简单返回值 在同一个文件定义特征并且实现,在上面这样示例代码很费劲,File 出现在 3 个代码块。...但是,随着经验增加,许多常用特征会成为习惯。只要理解了 PartialEq 特征对一种类型作用,也就理解了对其他类型作用。 PartialEq 对类型有什么作用呢?

1.5K20

Rust 标记Trait,公共词汇Trait

甚至枚举也是有大小,也就是说,无论实际存在是哪个变体,枚举总会占据足够空间来容纳其最大变体。...由于 Rust 语言本身会使用这种类型Trait为具有某些特征类型打上标记,因此我们将其称为标记Trait 然而,Rust 也有一些无固定大小类型,它们值大小不尽相同。...Rust 认为如果一个类型需要特殊清理代码,那么就必然需要特殊复制代码,因此不能是 Copy 类型 与 Clone 一样,可以使用 #[derive(Copy)] 让 Rust 为你派生出 Copy...:指不会主动占有资源,直到确有必要 要想用好 Rust,就必然涉及对所有权问题透彻思考,比如函数应该通过引用还是值接受参数。...大多数变体可以用固定字符串来处理,但有些也需要在消息包含附加数据 小结 Rust实用工具trait就都了解了,以目前代码练习以及结合其他资料,这些新概念Trait应该如何更好应用,还需多敲代码,

6510

Rust入坑指南:千人千构

Enum 很多编程语言都支持枚举类型,Rust也不例外。因此枚举对于大部分开发人员来说并不陌生,这里我们简单介绍一些使用方法及特性。 先来看一下Rust如何定义枚举和获取枚举值。...enum IpAddrKind { V4, V6, } let six = IpAddrKind::V6; let four = IpAddrKind::V4; 这里例子只是最简单定义枚举方法...Option枚举 Option是Rust标准库定义一个枚举。如果你用过Java8的话,一定知道一个Optional类,专门用来处理null值。...Rust是不存在null值,因为它太容易引起bug了。但如果确实需要时候怎么办呢,这就需要Option枚举登场了。...在介绍完Struct以后,紧接着又介绍了大家都很熟悉Enum枚举类型。重点说了Rust特殊枚举Option,然后介绍了match和if let这两种流程控制语法。

65130

Rust日报】 2021-01-21 Rust 产品实践:1Password

Rust 产品实践:1Password 我们采访了 1Password 工程副总裁 Michael Fey。...通过采访去了解他们为什么选择 Rust 开发他们产品,Rust 对于以安全为中心应用程序有哪些好处,以及如果你正在用 Rust 开发类似的东西,你应该研究哪些有用库,有哪些可取经验。...这个版本使用了最新版本Persy,并进行了所有相关改进。 根据这个版本对枚举 Rust 结构支持,枚举可以单独保存,也可以嵌入到其他枚举或结构,支持简单变体,或者具有单个嵌入值变体。...对于查询部分,现在可以在过滤器添加排序,具有简单变体枚举也可以在过滤器中使用,还修复了在考虑事务更改时过滤数据时对嵌入式结构过滤。...除了查询过滤器之外,现在还可以使用简单投影来只返回想要字段。

69040

听GPT 讲Rust源代码--compiler(33)

具体来说,该文件包含了一系列结构体、枚举和trait,用于表示和处理不同类型以及相关特征和约束。...通过定义这些结构体、枚举和trait,rustc_middle/src/ty/sty.rs文件提供了处理和表示Rust类型功能,以及相关特征和约束。...总之,rust/compiler/rustc_middle/src/ty/visit.rs文件结构体和特征Rust编译器类型系统访问和遍历核心逻辑,用于操作和处理类型各种情况,包括生命周期区域...它用于描述在布局计算过程应该如何验证布局正确性。 LayoutError 是一个枚举,表示与类型布局相关错误。...该文件包含了一系列结构体和trait,它们在打印过程中发挥不同作用。下面对其中几个结构体和trait进行详细介绍: Helper(bool)这是一个简单辅助结构体,用于封装一个布尔值。

6310

七十年编程语言发展漫谈

最近又用起了 Dart,经常在写代码时候要想想自己是在什么平台,用什么 IDE,在写什么语言。...我们从目前主流编程语言中,挑选出流行,具有历史影响力,按时间从上往下排序,依据类型和指导思想进行聚类,根据互相影响使用线条指向,并补充了一些关键性特征和评价,整理下图: 整理图过程,发现很多有趣点...属于改良。...Rust 属于改革,重新审视 C++应用场景,对语言特性重新设计,这真的是一次精彩尝试!Rust 也比 D 语言更加成功。...从 Java 被逐渐替代经验教训我们发现,目前 C++在应用层正处于城池渐失状态;我们应该明白,应用层和底层框架需求不同,不应该从顶到底都使用一套语言,现在 C++所失之城池就是新语言非常好机会

83771

听GPT 讲Rust源代码--libraryproc_macro

该文件定义了一个名为FxHasher结构体实现。FxHasher是一个自定义哈希器,它采用了一种叫做"Fowler-Noll-Vo" (FNV) 哈希算法,该算法简单高效且拥有较低冲突率。...ArenaBox: ArenaBox是一个简单盒子类型,它用于在Arena持有一个对象所有权。它内部包含了一个指向它所在Arena对象引用以及对象本身。...该文件定义了一些结构体和枚举,这些结构体和枚举被用于描述和表示Rust编译器和过程宏之间通信和数据交换。...通过以上介绍,你应该能够了解到rust/library/proc_macro/src/lib.rs文件实现proc_macro库提供了一系列用于操作、解析和生成标记流数据结构和方法。...以上就是在Rust源代码rust/library/proc_macro/src/diagnostic.rs文件中常用结构体和枚举类型作用介绍。

14710

听GPT 讲Rust源代码--compiler(8)

Rust,结构体可以通过实现某个特征来获得特殊能力或行为。structural_traits.rs文件主要目的是解决特征具体实现问题。...在Rust特征投影类型是指通过::AssocType方式来表达关联类型。...inherent_projection.rs文件代码就是实现了这个过程。 提取特征关联类型:在Rust特征可以定义与其相关联类型。这些类型可以在特征中使用,或者由实现该特征类型来确定。...在特征解决过程,该文件代码被用于处理与特征投影和特征关联类型有关操作。...它主要由以下几个部分组成: CalleeData:一个简单包装,用于将 Callee(表示 trait 对象方法调用者)与其对应虚函数表片段(TraitVtable)关联起来。

5310

听GPT 讲Rust源代码--srctools(6)

EntryCounter(usize): 这是一个简单结构体,用于记录特定代码片段数量。它包含一个usize类型计数器字段。...具体而言,move_item.rs文件定义了一些结构体、特征枚举类型,来支持移动操作分析和实现。...Traits: Wow: 这个特征没有明确具体作用,因为在代码片段只提到名称,并没有定义具体实现。 One: 这个特征也没有具体作用描述,因为在代码片段只提到名称。...综上所述,move_item.rs文件主要是用于定义和处理Rust代码移动操作,并包含了一些用于测试目的结构体和一些无明确功能描述特征枚举。...3.4 其他情况下,函数会根据语法树节点缩进级别以及光标当前所在行数计算出应该缩进位置,并返回LineBreak::WrapIndent,表示应该换行并且自动缩进到指定级别。

22710

编程语言70年:谁是世界上最好编程语言?

在补充了一些关键性特征和评价之后,我整理出下图: 整理图过程,我发现很多有趣点。让我们按时间顺序从上往下讲这张图。...1970-1979:这一年诞生出两个影响力极大语言:Smalltalk 和 C。巧合是这两个语言都是在 1972 年发布。...但是仔细了解 D 语言你会发现,这就是拿 C++编译器魔改一个「私有 C++语言」编译器。这也导致很多 C++弊病不能彻底废除,属于改良。 过了 3 年,Rust 横空出世。...即便如此,这也比在 C++花几个星期解决内存访问异常问题好的多。Rust 属于改革。重新审视 C++应用场景,对语言特性重新设计,这真的是一次精彩尝试。...从 Java 被逐渐替代经验教训我们发现,目前 C++在应用层正处于城池渐失状态。我们应该明白:应用层和底层框架需求不同,不应该从顶到底都使用一套语言。

2.3K100

听GPT 讲Rust源代码--librarycoresrc(7)

该函数实现很简单,只需要创建一个Ready结构体实例,并设置相应唤醒器。 Ready结构体以及相关类型和函数在Rust异步编程扮演了重要角色。...在 generator.rs ,定义了 Generator trait 和 GeneratorState 枚举类型。 Generator trait 定义了生成器类型应该遵循行为接口。...Deref trait用于重载解引用操作符(*),它允许在使用解引用操作时自定义指针行为。通过实现Deref trait,我们可以指定当某个类型被解引用时应该返回什么类型值。...这些结构体、特征枚举Rust异常处理和错误传递起到了重要作用。它们通过统一接口和规范来处理异常情况,提供了一种可靠且安全异常处理机制。...克隆是Rust语言中重要trait之一,用于复制一个对象并分配新内存,而不是简单引用。

16130

rust方法和关联函数

Rust方法 在大多数面向对象语言中都存在方法,方法一般和类关联在一起。在Rust也是类似的,方法和对象总是一起出现。Rust方法和结构体,枚举特征一起使用。...) } } } 因此,在rust定义方法格式如下: impl 结构体名|枚举名|特征名{ 函数1 函数2 ... } 另外一点需要注意是,&self实际上是self...:&Self简写,在一个impl块内,Self指代被实现方法结构体(枚举或者特征)类型,self指代此类型实例。...方法名和结构体字段名相同 在 Rust ,允许方法名跟结构体字段名相同,一般来说,方法跟字段同名,往往适用于实现get访问器,例如: pub struct Rectangle { width...这背后是Rust拥有自动引用和解引用功能。方法调用是 Rust 少数几个拥有这种行为地方。

52820

听GPT 讲Rust源代码--compiler(34)

NormalizeAfterErasingRegionsFolder是一个简单结构体,它实现了Folder trait核心功能。...该文件包含了一些结构体和枚举,用于表示类型不同属性和特征。 FlagComputation结构体在flags.rs文件定义了几个不同结构体,每个结构体都负责计算和管理特定类型标志位。...PlaceFlags:PlaceFlags结构体用于管理变量和表达式标志位。它提供了一种确定变量或表达式是什么类型方法,并计算相关标志位。...该文件包含了许多重要结构体、枚举特征,在编译器起到了不同作用。...以上是rust/compiler/rustc_middle/src/ty/mod.rs文件一些重要结构、特征枚举作用和功能介绍。

6410

听GPT 讲Rust源代码--srctools(2)

TypeRef枚举:表示类型引用,可以是简单类型,如基本数据类型、指针、引用等,也可以是复合类型,如数组、元组、函数指针等。...下面将详细介绍各个结构体、特征枚举作用: ImportInfo结构体:表示一个导入项信息。它包含了导入路径、别名、可见性等信息。 ImportMap结构体:代表整个导入项映射表。...以上列出结构体和枚举Rust源代码负责定义和处理导入项相关信息,并为Rust代码分析提供了必要支持。而Display特征Rust标准库定义一个特征,用于定义对象字符串表示形式。...在这个文件,Display特征被用于为各种结构体和枚举实现自定义显示功能。 SearchMode枚举表示查询模式,用于指示查询行为。...LabelRib结构体用于处理标签绑定上下文,BindingList结构体用于维护绑定列表状态信息,should结构体用于控制表达式是否应该被添加到LIR

17410
领券