一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

Asp.Net Core实战常见加密算法(C#)

先问个问题:为什么要使用加密算法? 因为数据在网络中传输时面临4个问题: 窃听 假冒 篡改 事后否认 加密技术就是用来解决“窃听”这个问题的。通常分为两大类:对称加密和非对称加密。 对称加密 概念:对称加密就是加密和解密使用同一个密钥,通常称之为“Session Key ”,这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典型的对称加密算法,它的Session Key长度为56bits。 优点:算法公开、计算量小、加密速度快、加密效率高。适用于需要加密大量数据的场景。 缺点:由于加解密使用同一个密钥,密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦。例如:不适用于浏览器到服务器的通信,因为密钥一旦发送到浏览器端就很容易暴露。 常见算法:AES,DES,3DES,TDEA,Blowfish,RC5,IDEA 非对称加密 概念:非对称加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用。“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。 优点:由于加解密是用不同的密钥,私钥并不公开,这样就保证了信息在网络传输中的安全性:即使被拦截也无法解密。非常适用于客户端到服务端的数据传输。例如:支付宝的支付请求,数字签名等。 缺点:加密速度慢,比较耗资源。只适用于少量敏感信息的加密。如果加密大量消息则效率会变得低下。另外,如果动态生成公钥和私钥也比较耗资源。 常见算法:RSA,Elgamal,背包算法,Rabin,D-H,ECC   有人可能会问,上面两类加密方式怎么没有MD5?MD5……严格意义上说不是一种加密算法,因为它不能解密。它只是一种密码散列算法,只是为了校验信息用的:保证信息没有篡改。如:你下载软件或游戏时,在下载页面官方都会提供一个“MD5字符串”,你下载完成后可以用md5工具对下载到的软件md5校验,如果得到的md5串和下载页面的一致,就说明软件或游戏没有被篡改过,可放心使用。   下面我们就一块来实战几种常见的加密方式和散列算法: DES 分类:对称加密 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。

  AES 分类:对称加密 高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。

  RSA 分类:非对称加密 RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。RSA就是他们三人姓氏开头字母拼在一起组成的。RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。

  生成公钥/密钥的方法(只适用于C#,其他编程语言使用需要转换)

    MD5 分类:散列算法 MD5信息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。

  SHA-2 分类:散列算法 SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准,由美国国家安全局研发,由美国国家标准与技术研究院(NIST)在2001年发布。属于SHA算法之一,是SHA-1的后继者。其下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。

  欢迎转载,请注明出处:龙生时代

龙生   03 Mar 2021
View Details

JAVA版身份证获取性别、出生日期及年龄

工作中需要根据身份证获取性别、出生日期及年龄,且要还要支持15位长度的身份证号码,网上搜索了一下,经过测试好像多少存在点问题,干脆自已写一个。 CertificateNo.java

  ResultDTO.java

  CertificateNoTest.java

  from:https://www.iteye.com/blog/bijian1013-2184409

龙生   28 Feb 2021
View Details

git fetch & pull详解

1、简单概括 先用一张图来理一下git fetch和git pull的概念: 可以简单的概括为: git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。 而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。 下面我们来详细了解一下git fetch 和git pull 的用法。 2、分支的概念 在介绍两种方法之前,我们需要先了解一下分支的概念: 分支是用来标记特定代码的提交,每一个分支通过SHA1sum值来标识,所以对分支的操作是轻量级的,你改变的仅仅是SHA1sum值。 如下图所示,当前有2个分支,A,C,E属于master分支,而A,B,D,F属于dev分支。

  它们的head指针分别指向E和F,对上述做如下操作:

  合并完成后:

  现在ABCDEFG属于master,G是一次合并后的结果,是将E和F的代码合并后的结果,可能会出现冲突。而ABDF依然属于dev分支。可以继续在dev的分支上进行开发:

  分支(branch)的基本操作:

  3、git fetch 用法 git fetch 命令:

  如果只想取回特定分支的更新,可以指定分支名:

  最常见的命令如取回origin 主机的master 分支:

  取回更新后,会返回一个FETCH_HEAD ,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:

  如图: 可以看到返回的信息包括更新的文件名,更新的作者和时间,以及更新的代码(19行红色[删除]和绿色[新增]部分)。 我们可以通过这些信息来判断是否产生冲突,以确定是否将更新merge到当前分支。 4、git pull 用法 前面提到,git pull 的过程可以理解为:

  即将远程主机的某个分支的更新取回,并与本地指定的分支合并,完整格式可表示为:

  如果远程分支是与当前分支合并,则冒号后面的部分可以省略:

  from:https://www.cnblogs.com/runnerjack/p/9342362.html

龙生   25 Feb 2021
View Details

containerd简述

containerd是容器虚拟化技术,从docker中剥离出来,形成开放容器接口(OCI)标准的一部分。 docker对容器的管理和操作基本都是通过containerd完成的。Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。Containerd 可以在宿主机中管理完整的容器生命周期:容器镜像的传输和存储、容器的执行和管理、存储和网络等。详细点说,Containerd 负责干下面这些事情: •管理容器的生命周期(从创建容器到销毁容器) •拉取/推送容器镜像 •存储管理(管理镜像及容器数据的存储) •调用 runC 运行容器(与 runC 等容器运行时交互) •管理容器网络接口及网络 注意:Containerd 被设计成嵌入到一个更大的系统中,而不是直接由开发人员或终端用户使用。 我们可以从下面几点来理解为什么需要独立的 containerd: •继续从整体 docker 引擎中分离出的项目(开源项目的思路) •可以被 Kubernets CRI 等项目使用(通用化) •为广泛的行业合作打下基础(就像 runC 一样) docker安装后containerd默认已安装,containerd包含如下命令组件: •containerd:高性能容器运行时。 •ctr:containerd的命令行客户端。 •runc:运行容器的命令行工具。 docker、containerd、docker-shim、runC关系: docker:docker本身而言,包括了docker client和dockerd,dockerd实属是对容器相关操作的api的最上层封装,直接面向操作用户。 containerd:dockerd实际真实调用的还是containerd的api接口(rpc方式实现),containerd是dockerd和runC之间的一个中间交流组件。 docker-shim:一个真实运行容器的载体,每启动一个容器都会起一个新的docker-shim的进程。它通过指定三个参数:容器ID、boundle目录(containerd对应某个容器生成目录)、运行时二进制(默认是runC)来调用runC的api创建一个容器。 runC:一个命令行工具端,根据OCI的标准来创建和运行容器。 containerd应用 docker镜像和containerd镜像通用,但组织方式和存放目录不同,导致docker与ctr命令不通用,各自管理自己的镜像和容器。 此外k8s还有客户端命令crictl,用法与docker基本相同,可crictl -h查看用法。 containerd的默认配置文件为/etc/containerd/config.toml,可通过命令:

输出默认配置,可参考文档https://github.com/containerd/containerd/blob/master/docs/ops.md

root键值用于存储containerd持久化数据。 state键值用于存储containerd临时性数据,设备重启后数据丢失。 显示containerd镜像

拉取hello-world镜像

注:必须全路径,从dockerhub上下载默认hello-world镜像。 运行容器

  参考: 1.https://github.com/containerd/containerd 2.https://containerd.io/docs/getting-started/ 3.Containerd 简介 4.Docker组件介绍(一):runc和containerd   from:https://www.cnblogs.com/embedded-linux/p/10850491.html

龙生   18 Feb 2021
View Details

Method not found: '!!0[] System.Array.Empty()'.

错误原因:程序里面没有可调用的方法(程序使用的是 .NET Framework 4.6,但是你自己的系统里面使用的不是 4.6版本)   解决方法:1.安装window sp1  ,下载地址是:https://www.microsoft.com/zh-cn/download/details.aspx?id=5842 2.安装.NET Framework 4.6  ,下载地址是 :https://www.microsoft.com/zh-cn/download/details.aspx?id=49981 3.重启电脑,OK   from:https://www.cnblogs.com/soundcode/p/5837673.html

龙生   08 Feb 2021
View Details

创业公司开发APP用原生还是RN、weex或flutter

近半年,自己创业做在线教育,近期也打算开发自己的APP,作为一个技术出身的创业者,所以可以在开发APP时自己做技术选型​。 但想到还有很多创业者或架构师也面临类似的问题,所以把自己的思考分享给需要的人。 我的客户端经验 笔者2011年毕业于北京交大,2015年下半年开始由操作系统开发转向安卓开发,2016年在搜狐开始使用react-native开发APP。 2017年曾短期在便利蜂参与过三个RN项目的开发,然后去易鑫从事大前端团队的管理,团队开发维护的原生APP,通过搭桥嵌入H5。 2019年初在快陪练负责前端团队,以纯flutter的方式上线了一个iOS版的钢琴资讯APP,且在直播上课APP中的订单模块接入了flutter。 过去半年多,使用uni-app开发了多个跨端小程序,其中uni-app集成了weex跨端APP开发框架,可以一套代码生成h5,各种小程序以及安卓和iOS的原生APP。 不管是原生APP、还是近几年比较热门的RN、weex或flutter跨端开发APP的技术,笔者都在真实项目中使用过。 正因为都用过,所以各自的坑有都进去过,虽然因为学的东西多,导致精力分散,很多技术都是略懂,但是总结一下,相信还是能有一定参考价值的。 移动应用开发的趋势 由于对移动应用的大量需求,很多公司已经把他们应用开发的重心转移到移动应用上了,这是一个不断有更好的技术、平台和框架流入的领域。 移动行业渴望进行一场革命,以遏制移动应用程序开发过程中出现的成本高、耗时长等问题。 因此,该变革以跨平台开发的形式出现。现在,维护代码和开发应用程序对于开发人员来说变得简单且省时。 现在,跨平台应用开发正在创业公司中变得越来越流行,相继出现了多种跨端开发原生APP的技术方案。 除了weex只在阿里系的公司用得多外,react native 和 flutter目前都有大量的公司在使用,并且互相竞争,试图证明自己是跨平台移动应用的最合适的王者。 React native 是 Facebook 2015年开源的,并且很快获得了大众的欢迎。而Google 的 flutter 则是这两年才火起来的新技术,它优势是更好的性能。 不仅对于资金紧张的初创公司,即使是大公司的新项目,初期都需要快速验证产品的可行性,因此多数公司都不会选择原生开发,而是基于跨端技术。 那么对于开发者来说,应该选用哪个跨平台应用程序开发框架比较好呢? 由于采用react native 和 flutter 的技术栈项目最多,所以本文主要分享我作为创业者在做客户端技术选型时,最后采纳的是使用RN还是flutter的过程。 react native vs flutter 环境搭建 从当前两个框架的最新版本来看,搭建原生开发环境都是比较复杂的,相对来讲,flutter要容易一些,特别是搭建Android开发环境。 编程语言 React Native 允许你使用 Javascript 开发应用程序,通过简单配置也可以使用微软维护的Typescript 语言进行开发,克服JS作为动态语言的一些不足。 由谷歌开发的 Flutter 提出了一种名为 Dart 的新编程语言。它对于开发人员来说是新手,但是那些具有 OOP 语言经验的人,比如 C ++ 和 JAVA,可以很容易地学习的。 IDE 和易于编码 如果我们讨论 React Native 的 IDE,那么它几乎支持所有领先的 IDE。然而,Flutter 受 Android studio / IntelliJ 和 visual studio 代码支持。 代码结构 Google 的 Dart 没有模板、样式和数据文件的分离,因此代码变得有点难以理解。 而 Javascript 遵循简单的代码结构,因此开发人员更清楚地理解和编写代码。 性能 因为 React Native 通过 JS […]

龙生   05 Feb 2021
View Details

Win10任务栏上的图标都放在哪个文件夹?Win10任务栏快捷图标路径分享

在Win10系统中,我们都会把常用的程序或应用图标放在任务栏,这样打开就方便多了,当然有的朋友会疑惑,这些图标都放在Win10系统的哪个文件夹中呢?带着这些疑问我们就来分享下任务栏图标存放路径。 推荐:Win10正式版64位 找到文件夹技巧: 1、按住SHIFT,然后右键点击图标,我们可以看到“复制为路径”; 2、复制到地址栏上或是记事本中,就可以看到文件具体位置了; 3、要打开文件夹,我们可以去除复制路径两边的引号,然后把如:360安装浏览器7.lnk 去除,回车就可以进入了。 得到地址为:C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\www.w10zj.com 以上就是我们要找的任务栏图标存放文件夹了~,希望Win10之家小编分享的技巧对大家有用。   from:http://www.w10zj.com/Win10xy/Win10yh_1067.html

龙生   04 Feb 2021
View Details

修改Nuget默认位置

打开配置目录:

  修改配置

  移动位置 C:\Users\user.nuget 移动到新位置   from:https://www.mscoder.cn/post/csharp/nuget/nuget-change-default-folder/

龙生   04 Feb 2021
View Details

[C#]VS2017调试时Console.WriteLine无法在Output窗口输出

问题: 之前在VS2012、VS2015中,可直接在应用程序中Console.WriteLine输出信息来调试bug。最近换到VS2017后,却发现怎么也无法输出 解决: 这个问题的原因是VS2017开始已经不再使用Hosting Process模式,在Hosting Process时可以将信息输出至 Output窗口。 在VS2017及以后的版本可以使用Trace.WriteLine来将调试信息输出至Output窗口。 另外VS2017对CPU的要求也高了,我的老机器一打开没多久就出现很多ServiceHub.Host.CLR.x86.exe的进程,导致写代码卡顿,不得已换了新机器,升级到i5后没再出现卡顿现象了。一起典型的软件倒逼硬件更新的例子,诸君勿笑.   from:https://blog.csdn.net/edcvf3/article/details/104827175

龙生   28 Jan 2021
View Details

2020 年十大热门机器学习项目

本文最初发表于 Medium 博客,经原作者 Anupam Chugh 授权,InfoQ 中文站翻译并分享。 2021 年才刚刚开始,在过去的一年中,机器学习领域中发生了很多事情。 本文介绍了最流行的开源研究项目、演示和原型。其范围从照片编辑到自然语言处理,再到使用“无代码”训练模型,我希望这些能够激发你去构建令人难以置信的人工智能产品。 1、Background Matting v2 https://github.com/PeterL1n/BackgroundMattingV2 Background Matting v2(背景抠图)从广受欢迎的 The World is Your Green Screen(世界是你的绿幕)开源项目中汲取灵感,展示了如何实时删除或更改背景。它提供了更好的性能(4K 时为 30fps,FHD 时为 60fps),并可与流行的视频会议应用 Zoom 一起使用。 该技术使用附加捕获的背景帧,并将其用于恢复 alpha 哑光和前景层。采用两个神经网络对高分辨率图像进行实时处理。 假如你想把某人从视频中移除,同时保留背景,这个项目绝对有用。 2、SkyAR https://github.com/jiupinjia/SkyAR 这是一个神奇的项目,它能对视频中的天空进行替换和协调,并能在视频中自动生成具有逼真和戏剧性风格的天空背景,而且风格可控。 这个以 Pytorch 为基础的项目使用了 pytorch-CycleGAN-and-pix2pix 项目中的部分代码,使用了天空抠图,通过光流进行运动估计,以及图像混合,实时提供视频艺术背景。 上面提到的开源项目在电影和视频游戏中有惊人的潜力,比如增加雨天、晴天等等。 3、AnimeGAN v2 https://github.com/TachibanaYoshino/AnimeGANv2 将照片卡通化总是一个有趣的机器学习项目。不是吗? 这个项目 AnimeGAN v2 是 AnimeGAN 的改进版本。具体来说,它在保证防止高频伪影产生的同时,将神经风格转移与生成对抗网络(GAN)结合起来完成任务。 4、txtai https://github.com/neuml/txtai 人工智能精准化的搜索引擎和问答聊天机器人永远是当前的需求。而这正是这个项目所要做的。 txtai 利用 sentence-transformers、transformers 和 faiss,为上下文搜索和提取式问题回答构建了一个人工智能引擎。 实际上, txtai 支持构建用于相似性搜索的文本索引,并基于抽取式创建问题回答系统。 5、Bringing-Old-Photos-Back-to-Life https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life 接下来是微软最新的照片修复项目,可以自动修复受损照片。 具体来说,它通过在 PyTorch 中的深度学习实现,利用划痕检测、人脸增强等技术,修复遭受复杂退化的老照片。 根据他们的研究论文:“我们训练了两种变自编码器(variational autoencoders,VAEs),它们分别将旧照片和干净照片转换到两个潜在空间。而这两个潜在空间之间的转换是通过合成的配对数据来学习的。由于紧凑的潜在空间中的域隙是封闭的,所以这种转换能很好地泛化到真实照片中。此外,为了解决一张旧照片中的各种混杂退化问题,我们设计了一个全局分支和一个局部分支,该分支包括一个局部非局部分块,针对结构化缺陷,如划痕和尘点,以及一个局部分支,针对非结构化缺陷,如噪声和模糊。” 从下面的演示中可以看出,该模型的性能明显优于传统的技术方法。 6、Avatarify https://github.com/alievk/avatarify Deepfake 项目已经横扫机器学习和人工智能社区。这个项目展示了一个典型的示例,它允许你在实时视频会议应用中创建照片般逼真的头像。 主要是利用 First Order Model(一阶模型)来提取视频中的动作,然后利用光流把它们应用到目标的头像上。通过这种方式,你可以在虚拟的摄像机上生成虚拟的人物,甚至可以将经典画作做成动画。从伊隆·马斯克到蒙娜丽莎,你可以模仿任何人来玩耍! 7、Pulse https://github.com/adamian98/pulse 这是一个人工智能模型,它显示了如何从一个低分辨率的人脸图像中生成一个逼真的人脸图像。 PULSE,即 Self-Supervised Photo Speampling via […]

龙生   28 Jan 2021
View Details
1 69 70 71 281