对称go攻略(对称挑战)
今天要跟大家讲解对称go攻略的知识,也会涉及对称挑战,给大家不一样的解决方案!
本文目录一览:
疯狂派对go全人物解锁与使用心得攻略
疯狂派对go人物怎么解锁?疯狂派对go哪个人物好用?下面小编为大家带来疯狂派对go全人物解锁与使用心得攻略:
第一个,能力最均衡的人,注意使用场景道具事半功倍,不过记得投毒以后,离中毒要死的人远点,不然可能被判为凶手。
第二个警察,通关一遍解锁,不能用道具,aoe清场能力基本没有,不过主动特殊能力栽赃是很强的单体清理技能,被动背尸体不会引发报警,可以杀人后一瞬间背起来放到过会可能被发现的地方再栽赃。
第三个忍者,任意人物任意关卡不让人发现尸体解锁。无光处站着进入隐身,被看到就会引发报警行为。忍者是靠近任何障碍物都能隐身,隐身看起来很慢,但实际有那个动作就开始算了,而且隐身后移动有大概1-2秒的延迟不会被发现,那时候能按方向键丢烟雾弹.基本除了那个妹子限定关和附加关第一关一出来就被包围的情况绝对不能用外,其他关都超好用,不过被发现后隐身就无效了.还有除了警察砍不了外,炸弹引来特警或者坑死太多警察来FBI都砍不了,FBI没发现的话能用隐身躲
第四个警察女儿,逃脱五次解锁,建议用附加关大眼睛触手那关解锁。第一下普攻击晕,第二下杀死,击晕后可以放到能销毁尸体的地方,有些地图十分给力,不会被发现。不过击晕时间有限,有的人在被你扛着时苏醒会揍你,有的会恐慌。击晕放马路上等车压也可以毁尸灭迹。
最后一个电锯杀人狂,连杀二十人解锁,公交车那关连杀二十好像不算,一般用游轮关烟雾弹连杀解锁。普攻范围大,可能碎尸,缺点是走路慢,主动技能有前摇后摇,效果是移速加快,碰到的都被碎尸,小范围清场给力,无法搬运尸体是另一个缺点,也是某些关好用。
精灵宝可梦LetsGo二周目如何通关_二周目游玩技巧分享
精灵宝可梦LetsGo二周目如何通关呢? 在游戏精灵宝可梦LetsGo中已经发布有一阵子了,有些玩家已经一周目通关了,迫不及待的想要进入二周目,那么二周目应该怎么玩呢?接下来小编就来为大家聊聊关于精灵宝可梦LetsGo二周目游玩技巧攻略,感兴趣的小伙伴们快来看看吧!
精灵宝可梦LetsGo二周目游玩技巧分享:
二周目游玩技巧分享
二周目指的是玩家打败四大天王和对手之后的剧情,二周目是一周目延续,本作中二周目主线就是捕获超梦和高个体宝可梦并且打败所有的大师训练家,肝!
首先要恭喜各位训练师成功成为关都冠军,在成为冠军之后,剧情自动解锁玩家飞行能力,可以在高空中飞行,可以捕捉地面所没有的宝可梦和穿越以前不能穿越的落差障碍。
推荐优先收集宝可梦图鉴,收集到150宝可梦图鉴(不包含梦幻和美录坦)可以在玉虹市玉虹大厦三层左侧房间找游戏总监,领取闪耀护符。
二周目玉虹市玉虹大厦三层,左侧房间左上角可以挑战森本,胜利可以获得10个PP极限提升剂。
通关后,关都地区出现了大师训练家。玩家只能使用和大师一样的宝可梦进行战斗,即便只是进化型也不行。打6个大师训练师之后,四天王门口会出现赤红。玉虹市玉虹大厦三层左侧房间左下角,可以更改称号。
在枯叶市码头,每天都可以和究极日月的队长茉莉对战,可获得一个银色王冠。
每天在深灰市博物馆左侧,可以帮大妈照顾呆呆兽,奖励一个大珍珠。
宝可梦联盟和道馆都可以反复挑战,赚取资金购买精灵球,每个道馆奖励13680元。应该是连锁赚钱外比较轻松的赚钱方式了,不过部分道馆还是需要走迷宫,感觉四大天王更直接暴力点。
游戏内隐藏道具每日都可以重新拾取(一周目也可以拾取部分隐藏道具)。
华蓝洞窟深处可以捕捉传说宝可梦超梦。捕捉超梦以后,出洞会触发剧情和小蓝对战,以后每天可以在华蓝市和小蓝对战一次。
三圣鸟闪电鸟、急冻鸟、火焰鸟分别位于无人发电厂、双子岛、冠军之路。剧情达到即可捕捉,可以占卜锁性格,个体值保底3V。但二周目其实三圣鸟属于野外能遇见的宝可梦,不是很稀有,但是野外遇见的三圣鸟个体值没有保证。
关于 网
请问什么是中国银行跨境GO金融攻略区功能?
中国银行跨境GO金融攻略区指在金融板块首页功能区下方“金融锦囊”的内容,目前攻略包括外币兑换、现钞存取、转账汇款、支付结算和其他五大类业务,具体如下:
1、外币兑换:购汇攻略、结汇攻略;
2、现钞存取:外币现钞预约攻略、外币现钞存款攻略、外币现钞取款攻略;
3、转账汇款:跨境汇款攻略、跨境收款攻略、境内外币划转攻略;
4、支付结算:信用卡攻略、借记卡攻略、境外提现攻略;
5、其他:存款证明攻略、代理开户见证攻略、留学贷款攻略。
进入攻略详情页,您可以看到四部分,攻略说明、相关功能入口、金融QA、相关资讯。金融QA显示相关金融功能常见问题,点击更多可跳转金融问多点板块。相关资讯显示攻略主题相关的图文资讯内容,用户点击可查看。
以上内容供您参考,业务规定请以实际为准。
如有疑问,欢迎咨询中国银行在线客服。
诚邀您下载使用中国银行手机银行APP或中银跨境GO APP办理相关业务。
对称加密算法以及使用方法
加密的原因:保证数据安全
加密必备要素:1、明文/密文 2、秘钥 3、算法
秘钥:在密码学中是一个定长的字符串、需要根据加密算法确定其长度
加密算法解密算法一般互逆、也可能相同
常用的两种加密方式:
对称加密:秘钥:加密解密使用同一个密钥、数据的机密性双向保证、加密效率高、适合加密于大数据大文件、加密强度不高(相对于非对称加密)
非对称加密:秘钥:加密解密使用的不同秘钥、有两个密钥、需要使用密钥生成算法生成两个秘钥、数据的机密性只能单向加密、如果想解决这个问题、双向都需要各自有一对秘钥、加密效率低、加密强度高
公钥:可以公开出来的密钥、公钥加密私钥解密
私钥:需要自己妥善保管、不能公开、私钥加密公钥解密
安全程度高:多次加密
按位异或运算
凯撒密码:加密方式 通过将铭文所使用的字母表按照一定的字数平移来进行加密
mod:取余
加密三要素:明文/密文(字母)、秘钥(3)、算法(向右平移3/-3)
安全常识:不要使用自己研发的算法、不要钻牛角尖、没必要研究底层实现、了解怎么应用;低强度的密码比不进行任何加密更危险;任何密码都会被破解;密码只是信息安全的一部分
保证数据的机密性、完整性、认证、不可否认性
计算机操作对象不是文字、而是由0或1排列而成的比特序列、程序存储在磁盘是二进制的字符串、为比特序列、将现实的东西映射为比特序列的操作称为编码、加密又称之为编码、解密称之为解码、根据ASCII对照表找到对应的数字、转换成二进制
三种对称加密算法:DES\3DES\ AES
DES:已经被破解、除了用它来解密以前的明文、不再使用
密钥长度为56bit/8、为7byte、每隔7个bit会设置一个用于错误检查的比特、因此实际上是64bit
分组密码(以组为单位进行处理):加密时是按照一个单位进行加密(8个字节/64bit为一组)、每一组结合秘钥通过加密算法得到密文、加密后的长度不变
3DES:三重DES为了增加DES的强度、将DES重复三次所得到的一种加密算法 密钥长度24byte、分成三份 加密--解密--加密 目的:为了兼容DES、秘钥1秘钥2相同==三个秘钥相同 ---加密一次 密钥1秘钥3相同--加密三次 三个密钥不相同最好、此时解密相当于加密、中间的一次解密是为了有三个密钥相同的情况
此时的解密操作与加密操作互逆,安全、效率低
数据先解密后加密可以么?可以、解密相当于加密、加密解密说的是算法
AES:(首选推荐)底层算法为Rijndael 分组长度为128bit、密钥长度为128bit到256bit范围内就可以 但是在AES中、密钥长度只有128bit\192bit\256bit 在go提供的接口中、只能是16字节(128bit)、其他语言中秘钥可以选择
目前为止最安全的、效率高
底层算法
分组密码的模式:
按位异或、对数据进行位运算、先将数据转换成二进制、按位异或操作符^、相同为真、不同为假、非0为假 按位异或一次为加密操作、按位异或两次为解密操作:a和b按位异或一次、结果再和b按位异或
ECB : 如果明文有规律、加密后的密文有规律不安全、go里不提供该接口、明文分组分成固定大小的块、如果最后一个分组不满足分组长度、则需要补位
CBC:密码链
问题:如何对字符串进行按位异或?解决了ECB的规律可查缺点、但是他不能并行处理、最后一个明文分组也需要填充 、初始化向量长度与分组长度相同
CFB:密文反馈模式
不需要填充最后一个分组、对密文进行加密
OFB:
不需要对最后一组进行填充
CTR计数器:
不需要对最后一组进行填充、不需要初始化向量
Go中的实现
官方文档中:
在创建aes或者是des接口时都是调用如下的方法、返回的block为一个接口
func NewCipher(key [] byte ) ( cipher . Block , error )
type Block interface {
// 返回加密字节块的大小
BlockSize() int
// 加密src的第一块数据并写入dst,src和dst可指向同一内存地址
Encrypt(dst, src []byte)
// 解密src的第一块数据并写入dst,src和dst可指向同一内存地址
Decrypt(dst, src []byte)
}
Block接口代表一个使用特定密钥的底层块加/解密器。它提供了加密和解密独立数据块的能力。
Block的Encrypt/Decrypt也能进行加密、但是只能加密第一组、因为aes的密钥长度为16、所以进行操作的第一组数据长度也是16
如果分组模式选择的是cbc
func NewCBCEncrypter(b Block, iv []byte) BlockMode 加密
func NewCBCDecrypter(b Block, iv []byte) BlockMode 解密
加密解密都调用同一个方法CryptBlocks()
并且cbc分组模式都会遇到明文最后一个分组的补充、所以会用到加密字节的大小
返回一个密码分组链接模式的、底层用b加密的BlockMode接口,初始向量iv的长度必须等于b的块尺寸。iv自己定义
返回的BlockMode同样也是一个接口类型
type BlockMode interface {
// 返回加密字节块的大小
BlockSize() int
// 加密或解密连续的数据块,src的尺寸必须是块大小的整数倍,src和dst可指向同一内存地址
CryptBlocks(dst, src []byte)
}
BlockMode接口代表一个工作在块模式(如CBC、ECB等)的加/解密器
返回的BlockMode其实是一个cbc的指针类型中的b和iv
# 加密流程:
1. 创建一个底层使用des/3des/aes的密码接口 "crypto/des" func NewCipher(key []byte) (cipher.Block, error) # -- des func NewTripleDESCipher(key []byte) (cipher.Block, error) # -- 3des "crypto/aes" func NewCipher(key []byte) (cipher.Block, error) # == aes
2. 如果使用的是cbc/ecb分组模式需要对明文分组进行填充
3. 创建一个密码分组模式的接口对象 - cbc func NewCBCEncrypter(b Block, iv []byte) BlockMode # 加密 - cfb func NewCFBEncrypter(block Block, iv []byte) Stream # 加密 - ofb - ctr
4. 加密, 得到密文
流程:
填充明文:
先求出最后一组中的字节数、创建新切片、长度为新切片、值也为切片的长度、然后利用bytes.Reapet将长度换成字节切片、追加到原明文中
//明文补充
func padPlaintText(plaintText []byte,blockSize int)[]byte{
//1、求出需要填充的个数
padNum := blockSize-len(plaintText) % blockSize
//2、对填充的个数进行操作、与原明文进行合并
newPadding := []byte{byte(padNum)}
newPlain := bytes.Repeat(newPadding,padNum)
plaintText = append(plaintText,newPlain...)
return plaintText
}
去掉填充数据:
拿去切片中的最后一个字节、得到尾部填充的字节个数、截取返回
//解密后的明文曲调补充的地方
func createPlaintText(plaintText []byte,blockSize int)[]byte{
//1、得到最后一个字节、并将字节转换成数字、去掉明文中此数字大小的字节
padNum := int(plaintText[len(plaintText)-1])
newPadding := plaintText[:len(plaintText)-padNum]
return newPadding
}
des加密:
1、创建一个底层使用des的密码接口、参数为秘钥、返回一个接口
2、对明文进行填充
3、创建一个cbc模式的接口、需要创建iv初始化向量、返回一个blockmode对象
4、加密、调用blockmode中的cryptBlock函数进行加密、参数为目标参数和源参数
//des利用分组模式cbc进行加密
func EncryptoText(plaintText []byte,key []byte)[]byte{
//1、创建des对象
cipherBlock,err := des.NewCipher(key)
if err != nil {
panic(err)
}
//2、对明文进行填充
newText := padPlaintText(plaintText,cipherBlock.BlockSize())
//3、选择分组模式、其中向量的长度必须与分组长度相同
iv := make([]byte,cipherBlock.BlockSize())
blockMode := cipher.NewCBCEncrypter(cipherBlock,iv)
//4、加密
blockMode.CryptBlocks(newText,newText)
return newText
}
des解密:
1、创建一个底层使用des的密码接口、参数为秘钥、返回一个接口
2、创建一个cbc模式的接口、需要创建iv初始化向量,返回一个blockmode对象
3、加密、调用blockmode中的cryptBlock函数进行解密、参数为目标参数和源参数
4、调用去掉填充数据的方法
//des利用分组模式cbc进行解密
func DecryptoText(cipherText []byte, key []byte)[]byte{
//1、创建des对象
cipherBlock,err := des.NewCipher(key)
if err != nil {
panic(err)
}
//2、创建cbc分组模式接口
iv := []byte("12345678")
blockMode := cipher.NewCBCDecrypter(cipherBlock,iv)
//3、解密
blockMode.CryptBlocks(cipherText,cipherText)
//4、将解密后的数据进行去除填充的数据
newText := clearPlaintText(cipherText,cipherBlock.BlockSize())
return newText
}
Main函数调用
func main(){
//需要进行加密的明文
plaintText := []byte("CBC--密文没有规律、经常使用的加密方式,最后一个分组需要填充,需要初始化向量" +
"(一个数组、数组的长度与明文分组相等、数据来源:负责加密的人提供,加解密使用的初始化向量必须相同)")
//密钥Key的长度需要与分组长度相同、且加密解密的密钥相同
key := []byte("1234abcd")
//调用加密函数
cipherText := EncryptoText(plaintText,key)
newPlaintText := DecryptoText(cipherText,key)
fmt.Println(string(newPlaintText))
}
AES加密解密相同、所以只需要调用一次方法就可以加密、调用两次则解密
推荐是用分组模式:cbc、ctr
aes利用分组模式cbc进行加密
//对明文进行补充
func paddingPlaintText(plaintText []byte , blockSize int ) []byte {
//1、求出分组余数
padNum := blockSize - len(plaintText) % blockSize
//2、将余数转换为字节切片、然后利用bytes.Repeat得出有该余数的大小的字节切片
padByte := bytes.Repeat([]byte{byte(padNum)},padNum)
//3、将补充的字节切片添加到原明文中
plaintText = append(plaintText,padByte...)
return plaintText
}
//aes加密
func encryptionText(plaintText []byte, key []byte) []byte {
//1、创建aes对象
block,err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//2、明文补充
newText := paddingPlaintText(plaintText,block.BlockSize())
//3、创建cbc对象
iv := []byte("12345678abcdefgh")
blockMode := cipher.NewCBCEncrypter(block,iv)
//4、加密
blockMode.CryptBlocks(newText,newText)
return newText
}
//解密后的去尾
func clearplaintText(plaintText []byte, blockSize int) []byte {
//1、得到最后一个字节、并转换成整型数据
padNum := int(plaintText[len(plaintText)-1])
//2、截取明文字节中去掉得到的整型数据之前的数据、此处出错、没有用len-padNum
newText := plaintText[:len(plaintText)-padNum]
return newText
}
//aes解密
func deCryptionText(crypherText []byte, key []byte ) []byte {
//1、创建aes对象
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//2、创建cbc对象
iv := []byte("12345678abcdefgh")
blockMode := cipher.NewCBCDecrypter(block,iv)
//3、解密
blockMode.CryptBlocks(crypherText,crypherText)
//4、去尾
newText := clearplaintText(crypherText,block.BlockSize())
return newText
}
func main(){
//需要进行加密的明文
plaintText := []byte("CBC--密文没有规律、经常使用的加密方式,最后一个分组需要填充,需要初始化向量")
//密钥Key的长度需要与分组长度相同、且加密解密的密钥相同
key := []byte("12345678abcdefgh")
//调用加密函数
cipherText := encryptionText(plaintText,key)
//调用解密函数
newPlaintText := deCryptionText(cipherText,key)
fmt.Println("解密后",string(newPlaintText))
}
//aes--ctr加密
func encryptionCtrText(plaintText []byte, key []byte) []byte {
//1、创建aes对象
block,err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//2、创建ctr对象,虽然ctr模式不需要iv,但是go中使用ctr时还是需要iv
iv := []byte("12345678abcdefgh")
stream := cipher.NewCTR(block,iv)
stream.XORKeyStream(plaintText,plaintText)
return plaintText
}
func main() {
//aes--ctr加密解密、调用两次即为解密、因为加密解密函数相同stream.XORKeyStream
ctrcipherText := encryptionCtrText(plaintText, key)
ctrPlaintText := encryptionCtrText(ctrcipherText,key)
fmt.Println("aes解密后", string(ctrPlaintText))
}
英文单词:
明文:plaintext 密文:ciphertext 填充:padding/fill 去掉clear 加密Encryption 解密Decryption
详细介绍对称go攻略的内容,本站也有专题介绍对称挑战,请多多关注。