erlang rsa加密解密

-module(test).

-export([encrypt/0, decrypt/1]).

encrypt() ->
	PemBin = <<"-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQC1pJLB45JEyit2+vOeZDIhnICGuf4h/w4OEwDn8C0BO84nLpoh\n7O8idxizwCkvmojdytgHc+x4XFdVfzT8ZEKupH97yK8GXw0hQbMbRJssaheU9lsb\nAoSUV7V5bjckqfIdn2AE4jvus9nNo9KWgJoVbZYQGefMmBRNLLIvJbMntwIDAQAB\nAoGAXhtvtWhUBbPApRoLUcqTdnqA1ExUcASWoZAS7hevGW6EtiQc0urQUkjl0WsD\na5hixJYtKl9S6mDdFnybVRAUw0m3aDMZYiHZDk/f7YL+Rz7piHcbzB68x8hSIfDc\n5ylEyohLnDOzq0TcGsn6jcFnCqSBe/cTXx6ALapK45e34fECQQDxRqqzwD2nhDhZ\nBDMzQYldiONeaj+sZyOcfRz6KUc3nWyAvWYZGB1STAb7WPv0Loo2TFLELMQsz55l\n5vFW8AeDAkEAwLpJnwvoZ3hhu1K3fZsA6IMeGUnYWL9AaMClLEVLy4o1pI2Bbn/q\nG2UYS+DiIULYOp6d82dqyCGnBbNELn00vQJAAw5ADzK6FSsJg6cX9ug3kyWuq31w\n/P/5ZXv4J/rp2fx2aVL8vgieJnKsC/beigMk4PcqfS2L9n1Spju8hrtXfQJBALV2\nMR9pTNcvh4WiqlW/filuWwageu2ElZaL3HlEfcsVRNC806NBGSHWG/xFr2R11bXL\n5xhoxSfOV76MPaQwC1kCQCtixwm5s7LqYdbCKmrQrPJJzBamE7nNfAPFphG4mR2/\n4K1oO+byCdSzw0KOX9rHqeOcgom+vybRC5NUMxpe1jk=\n-----END RSA PRIVATE KEY-----">>,
	[DSAEntry] =  public_key:pem_decode(PemBin),
	PrivateKey = public_key:pem_entry_decode(DSAEntry),
	{'RSAPrivateKey', _Version, Modulus, _PublicExponent, _PrivateExponent, _Prime1, _Prime2, _Exponent1, _Exponent2, _Coefficient, _OtherPrimeInfos} = PrivateKey,
	Size = byte_size(binary:encode_unsigned(Modulus)) - 11,
	Msg = <<"devicefeweger5hy67i89kjuytegrwfvcqe34567j8k9loikudesadfdsfrt564trefdg5trvfdvtgbnyhjunyhbgfvcdolikujhytr675rwfecsdvrtvfbrthnuy5nbtervferwbtynumnybregfvwfdgergrtyh7ujh56tgrvwefecefvgyj6uyrthgtvewcdevwt5j7uyhrtgvf4y6u7hyrtevceeefbtyu5jntdevicefewegt">>,
	Chunks = split_packet(Size, Msg),
	EnChunks = lists:map(fun(A) ->
		public_key:encrypt_private(A, PrivateKey)
	end, Chunks),
	list_to_binary(EnChunks).

decrypt(Encode) ->
	PemBin = <<"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1pJLB45JEyit2+vOeZDIhnICG\nuf4h/w4OEwDn8C0BO84nLpoh7O8idxizwCkvmojdytgHc+x4XFdVfzT8ZEKupH97\nyK8GXw0hQbMbRJssaheU9lsbAoSUV7V5bjckqfIdn2AE4jvus9nNo9KWgJoVbZYQ\nGefMmBRNLLIvJbMntwIDAQAB\n-----END PUBLIC KEY-----">>,
	[DSAEntry] =  public_key:pem_decode(PemBin),
	PublicKey = public_key:pem_entry_decode(DSAEntry),
	{'RSAPublicKey', Modulus, _PublicExponent} = PublicKey,
	Size = byte_size(binary:encode_unsigned(Modulus)),
	Chunks = split_packet(Size, Encode),
	EnChunks = lists:map(fun(A) ->
		public_key:decrypt_public(A, PublicKey)
	end, Chunks),
	list_to_binary(EnChunks).

split_packet(Size, P) when byte_size(P) >= Size->
    {Chunk, Rest} = split_binary(P, Size),
    [Chunk|split_packet(Size, Rest)];
split_packet(_Size, <<>>) ->
    [];
split_packet(_Size, P)  ->
    [P].

在控制台测试

> c(test).
{ok, test}
> EncryptS = test:encrypt().
<<....>>
> test:decrypt(EncryptS).

今天才知道,rsa加密解密是有长度限制的,调试了好长时间,莫名其妙不知道为什么会报错,搜索到其他的语言写的demo才知道

 

转载于:https://my.oschina.net/csq/blog/2050919

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值