根据微软帮助文档,convertto-securestring有两种加密模式。如果在指定密码的情况下,则使用aes加密,否则使用windows dpapi加密。而且aes加密也没有指明iv值与加密模式。

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/convertto-securestring?view=powershell-6

该命令在Microsoft.PowerShell.Security包中,去github中查找相关代码

https://github.com/PowerShell/PowerShell/blob/master/src/Microsoft.PowerShell.Security/security/SecureStringCommands.cs#L210

可以看出,在 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解密的更多相关文章

  1. Python解密网易云音乐缓存文件获取MP3

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:GeneralMonkey Python解密网易云音乐缓存文件获取MP3 ...

  2. 使用Python解密仿射密码

    新学期有一门密码学课,课上老师布置了一道密码学题,题目如下: 解密由仿射密码加密的密文“DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS” 想解密这个密文,首先必须要知道仿 ...

  3. Python 解密JWT验证苹果登录

    验证苹果登录,官方提供两种验证方法,一种是token,另一个种是code.这里使用的是token 登录流程: 苹果客户端调用苹果API,获取到用户的信息,包括: user_id 昵称 identity ...

  4. des解密不完整,前面几位是乱码的解决办法

    在工作中遇到的Des解密问题,第三方发来的数据需要我们进行des解密,但是解密的结果前几位始终是乱码.废了半天劲,终于找到了问题所在. 下面先介绍一下des,了解des的同学可以直接看下面的解决办法. ...

  5. 优志愿前端数据加密破解-python

    # coding=utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "etiaky.sett ...

  6. JavaScript base64 加密解密

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 使用openssl库实现RSA、AES数据加密

         openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所 ...

  8. [转]使用openssl库实现RSA、AES数据加密

    openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做 ...

  9. 【Python3爬虫】常见反爬虫措施及解决办法(三)

    上一篇博客的末尾说到全网代理IP的端口号是经过加密混淆的,而这一篇博客就将告诉你如何破解!如果觉得有用的话,不妨点个推荐哦~ 一.全网代理IP的JS混淆 首先进入全网代理IP,打开开发者工具,点击查看 ...

随机推荐

  1. final阶段20191121-5 Scrum立会报告+燃尽图 01

    此作业要求参见:http://edu.cnblogs.com/campus/nenu/2019fall/homework/10065 一: 组名:组长组 组长:杨天宇 组员:魏新  罗杨美慧   王歆 ...

  2. 基于FPGA的SPI FLASH控制器设计

    1.SPI FLASH的基本特征 本文实现用FPGA来设计SPI FLASH,FLASH型号为W25Q128BV.支持3种通信方式,SPI.Dual SPI和Quad SPI.FLASH的存储单元无法 ...

  3. 【转载】实现a元素href URL链接自动刷新或新窗口打开

    又是我偶像的新文,这个小技巧的用户体验真的非常非常棒! 文章转载自 张鑫旭-鑫空间-鑫生活 http://www.zhangxinxu.com/ 原文链接:https://www.zhangxinxu ...

  4. Ural1057. Amount of Degrees 题解 数位DP

    题目链接: (请自行百度进Ural然后查看题号为1057的那道题目囧~) 题目大意: Create a code to determine the amount of integers, lying ...

  5. 「2018-11-05模拟赛」T5 传送机 解题报告

    5.传送机(sent.*) 问题描述: 黄黄同学要到清华大学上学去了.黄黄同学很喜欢清华大学的校园,每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄黄同学想每条路也只走一遍. 我们一般人很可能对 ...

  6. Linux环境下部署svn服务详解

    说明 环境: 操作系统:centos 8.0 IP:39.100.228.13 安装 用ROOT账号登录,在控制台执行以下命令,一直默认安装就好可以了. [root@localhost ~]#yum ...

  7. 2013 ACM/ICPC Asia Regional Online —— Warmup2 ABEGKL

    HDU4716 A. A Computer Graphics Problem A题目描述 题意:输出手机剩余电量,保证给出的数是10的倍数. 题解:水题,按题意输出即可. 代码: #include & ...

  8. GDAL集成GEOS

    因为要用到缓冲区分析,在使用Buffer的时候提示:ERROR 6: GEOS support not enabled,查了一下资料需要集成GEOS库.因为GDLA默认编译是没有集成GEOS库的. 现 ...

  9. Java项目之家庭收支记账软件

    模拟实现基于文本界面的家庭记账软件,该软件能够记录家庭的收入支出,并能够打印收支明细表. 项目采用分级菜单方式.主菜单如下: 假设家庭起始的生活基本金为10000元. 每次登记收入(菜单2)后,收入的 ...

  10. 【DPDK】【CPU usage】DPDK应用如何计算当前系统的压力

    [前言] 使用DPDK开发的朋友应该都了解使用dpdk的fwd线程的工作模式是polling模式,即100%轮询的方式去加速网络IO,这样我们在操作系统层面上来观察目标processer会发现usag ...