要先在客户端生成生成openpgp密钥对,也可以导入.asc密钥。我后续加密解密是用控制台调cmd写的
新建密钥对,密码句保护勾上的话,后续就要写密码password
新建的密钥对
客户端一定要有密钥才可以加密,最好也认证了,认证可以客户端可以完成。没认证会询问的,就要加下面这句代码进行询问交互
psi.CreateNoWindow = false;//没认证时会询问,需要交互
加密用指纹和子密钥编号,不用密码/密钥
fingerprint:就是指纹/子密钥编号
routeInitial:源文件
–output {routeEncrypt} :加密后的文件,也可以不写,默认会生成.asc文件
只加密
sCommandEncrypt = $@"gpg --recipient {fingerprint} --armor --yes --output {routeEncrypt} --encrypt {routeInitial}"
加密+签名
–local-user {fingerprint}:用哪个指纹签名
–pinentry-mode loopback --passphrase {password} :免交互输入签名的密码,不写密码会弹框询问
sCommandEncrypt = $@"gpg --pinentry-mode loopback --passphrase {password} --local-user {fingerprint} --recipient {fingerprint} --armor --sign --yes --output {routeEncrypt} --encrypt {routeInitial}";
解密不用写私钥,但要把私钥导入到客户端,不管加密有没有加签名,解密都是下面的这句话
个人碎念:解密要密码,–passphrase {password} 密码其实在第一次解密的时候写对就可以了,直到下一次更改密码前都不用写,所以要格外的注意,就是这个原因我最开始以为没有密码也可以解,直到我改了一次密码
sCommandDecrypt = $@"gpg --pinentry-mode loopback --passphrase {password} --yes --output {routeDecrypt} --decrypt {routeEncrypt}
下面就是纯粹的签名,验签了
签名。signBefore是源文件
var sign = $@"gpg --pinentry-mode loopback --passphrase {password} --local-user {fingerprint} --armor --detach-sign {signBefore}";//签名后生成.asc文件
验签。signAfter是asc文件
var signVeri = $@"gpg --verify {signAfter} {signBefore} ";
好了,到此完结。