convertto-securestring结果 使用python解密
根据微软帮助文档,convertto-securestring有两种加密模式。如果在指定密码的情况下,则使用aes加密,否则使用windows dpapi加密。而且aes加密也没有指明iv值与加密模式。
该命令在Microsoft.PowerShell.Security包中,去github中查找相关代码
可以看出,在 SecureStringHelper.Encrypt(SecureString, Key);中对待加密的字符串执行加密操作。跟进
https://github.com/PowerShell/PowerShell/blob/master/src/System.Management.Automation/security/SecureStringHelper.cs
如果iv不存在的话,则使用aes对象默认的iv,文档在这里
https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.aes?view=netframework-4.8
iv默认为随机数生成
加密完成后,iv通过base64存储,而加密后的数据,通过 ByteArrayToString函数编码。
internal static string ByteArrayToString(byte[] data)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sb.Append(data[i].ToString("x2", System.Globalization.CultureInfo.InvariantCulture));
}
return sb.ToString();
}
其实就是转换hex,直接存储,类似于webshell上传文件的编码
securityHelpers.encrypt 函数返回上图中的EncryptionResult对象,回到最开始的processrecord函数中
将结果拼接为,c#本地化处理,2, iv,加密后的值,中间用| 分割。再经过一次base64编码。最终输出给用户
python解密注意事项,
1.
c# 中字符串等等,都是双字节,例如ascii的话,会通过假如0x00来格式化为双字节,所以再windows中如果编码函数用错了,极易导致null截断问题。(windows核心编程第一章)
python 解密程序如下
import base64
import binascii
from Crypto.Cipher import AES
sc = base64.b64decode(
"76492d1116743f0423413b16050a5345MgB8ADcAdwBsAHgAUwBRAFAAUwBNADEAUABIAHkAKwBUAHUAWABkAEQAYgBHAEEAPQA9AHwAMAA2ADgAZQAxADkANwBiADQAZAAxADgAOAA1ADkAZgA0ADEAZQAyADcAYQA5AGQANgBiADYANABhAGEAYgBjAGYAMwA3AGEANgA5ADUANQBkADIAMQA4AGUANwBhAGMANgAwADMAZAA2ADgANAA3ADIAMQBkADAAYgA5ADEAYQAzADAANQBkAGUANAA2ADcANwBhADAAMQA0ADQAMwA2ADIAYwBlAGEAMgBjADIANwAyAGMAMQA2AGIAMABkADgA")
iv = sc.split(b'|')[1]
iv = base64.b64decode(iv)
enc = sc.split(b'|')[2]
enc = enc.replace(b'\x00', b"")
dataLen = len(enc) // 2
byte_enc = bytearray(dataLen)
i = 0
while i < dataLen:
byte_enc[i] = int(enc[2 * i:2 * i + 2], 16)
i += 1
key = base64.b64decode("dGhpc19pc190aGVfa2V5MXRoaXNfaXNfdGhlX2tleTE=")
cipher = AES.new(key, AES.MODE_CBC, iv)
plan_text = cipher.decrypt(byte_enc)
print(plan_text.replace(b'\x00', b""))
注意:该dem没有做padding处理
convertto-securestring结果 使用python解密的更多相关文章
- Python解密网易云音乐缓存文件获取MP3
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:GeneralMonkey Python解密网易云音乐缓存文件获取MP3 ...
- 使用Python解密仿射密码
新学期有一门密码学课,课上老师布置了一道密码学题,题目如下: 解密由仿射密码加密的密文“DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS” 想解密这个密文,首先必须要知道仿 ...
- Python 解密JWT验证苹果登录
验证苹果登录,官方提供两种验证方法,一种是token,另一个种是code.这里使用的是token 登录流程: 苹果客户端调用苹果API,获取到用户的信息,包括: user_id 昵称 identity ...
- des解密不完整,前面几位是乱码的解决办法
在工作中遇到的Des解密问题,第三方发来的数据需要我们进行des解密,但是解密的结果前几位始终是乱码.废了半天劲,终于找到了问题所在. 下面先介绍一下des,了解des的同学可以直接看下面的解决办法. ...
- 优志愿前端数据加密破解-python
# coding=utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "etiaky.sett ...
- JavaScript base64 加密解密
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用openssl库实现RSA、AES数据加密
openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所 ...
- [转]使用openssl库实现RSA、AES数据加密
openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做 ...
- 【Python3爬虫】常见反爬虫措施及解决办法(三)
上一篇博客的末尾说到全网代理IP的端口号是经过加密混淆的,而这一篇博客就将告诉你如何破解!如果觉得有用的话,不妨点个推荐哦~ 一.全网代理IP的JS混淆 首先进入全网代理IP,打开开发者工具,点击查看 ...
随机推荐
- 1072 开学寄语 (20分)C语言
下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面.理发.整衣,然后思过.读书.锻炼.明智.开悟 ...
- virtualenv虚拟环境使用及介绍
一.为什么使用virtualenv虚拟环境 每个虚拟环境下的依赖相互独立,不同的项目可以单独使用一套python环境,减少各依赖包的影响 更容易部署 容器化 二.virtualenv创建虚拟环境 三. ...
- WPF 给Button按钮加小图标图片Image
前言:当WPF项目后台完成到一定程度的时候,就可以对XAML前端进行美化啦,个人认为XAML前端还是挺有意思的. 下面举一个Button加过小图标后的例子: 是不是比生硬的文字看来更人性化了呢? 不多 ...
- Qt5学习(2)
1.学习了qt quick application 这是一种跟application不同的设计方式.主要就是靠“拖拖拽拽”,然后设置属性(颜色,大小),布局(margins等),然后要注意控件的从属关 ...
- 【转】Algorithms -离散概率值(discrete)和重置、洗牌(shuffle)算法及代码
离散概率值(discrete) 和 重置\洗牌(shuffle) 算法 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/1 ...
- 【原创】(十六)Linux内存管理之CMA
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- Netty快速入门(08)ByteBuf组件介绍
前面的内容对netty进行了介绍,写了一个入门例子.作为一个netty的使用者,我们关注更多的还是业务代码.也就是netty中这两种组件: ChannelHandler和ChannelPipeline ...
- 梳理js数组去重中代码比较简洁的方案
一.es6 Set去重 function removal(arr) { return Array.from(new Set(arr)) } let arr=[1,2,1,3,4,5,5] remova ...
- 关于revit的外部扩展存储
最近被revit的外部扩展存储搞得死去活来,作为日后再次使用的预防针,此处随手留下印记,以作警示. 首先我们知道外部扩展存储ExtensibleStorage是revit提供给revit二次开发人员用 ...
- 编写SQL查询范围分区类型,MAX分区范围
需求 对于分区表,对于范围分区类型来说,查询MAX分区及对应的分区范围. ==查询分区表对应的最大分区信息 ==排除了自扩展分区(如果是自扩展分区,但是最大的分区不是自扩展的并未排除在外) ==排除了 ...